package com.wonders.week01.collection;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* JDK1.7
* HashTable
* (1)这个类实现了一个哈希表,它将键映射到值。任何非空对象都可以作为键或值使用
* (2)为了从哈希表中恢复和存储对象,该对象必须重写hashCode和equals方法
* (3)有两个参数影响着hashtable:初始容量和负载因子,初始容量代表的是在哈希表中可以存储的数量,
* 初始化容量仅仅是当hashtable被创建时的一个容量大小。
* (4)一般来说,默认的负载因子大小是0.75,在时间和空间的消耗方面提供了一个很好的平衡,
* (5)在查找中,更高的值会增加时间复杂度但是会降低空间的的消耗。
* (6)线程安全的类
* @author liyongyong
*
*/
public class HashTableTest {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("aaa", 1);
map.put("bbb", 2);
map.put("ccc", 3);
Hashtable<String , Integer> numbers = new Hashtable<String, Integer>();
//在hashtable中的key中映射value,其中key和value都不可以为null
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
//返回hashtable中key的个数
int size = numbers.size();
System.out.println("numbers集合中的元素个数为: " + size);
//判断是否在hashtable中不存在键值对的映射
boolean flag = numbers.isEmpty();
System.out.println("如果在Hashtable中存在键值对映射,返回true,否则返回false : " + flag);
//返回hashtable中的键
Enumeration<String> key = numbers.keys();
while (key.hasMoreElements()) {
String string = (String) key.nextElement();
System.out.print(string + " ");
}
System.out.println();
//返回hashtable中的值
Enumeration<Integer> value = numbers.elements();
while (value.hasMoreElements()) {
Integer integer = (Integer) value.nextElement();
System.out.print( integer + " ");
}
System.out.println();
//判断是否有键值对存在于hashtable中,参数是一个对象类型,
//传入的参数应该是value而不是key
boolean exist = numbers.contains(1);
System.out.println("是否存在键值对 :" + exist) ;
//如果在hashtable中有一个或者多个key都映射了这个value,则返回true
boolean containsValue = numbers.containsValue(2);
System.out.println("存在映射 :" + containsValue);
//如果这个具体的对象是hashTable中的一个key,则返回true.
boolean containsKey = numbers.containsKey("one");
System.out.println("存在这个key : " + containsKey);
//返回在hashtable中键所映射的value,如果这个key在hashtable中不存在,则返回null
Integer v1 = numbers.get("one");
System.out.println("该键所映射的值是: " + v1);
//从hashtable中根据key移除相关的键值对,如果key在hashtable中不存在,则这个方法什么也不会做
numbers.remove("one");
Enumeration<Integer> v = numbers.elements();
System.out.print("remove以后的结果:");
while (v.hasMoreElements()) {
Integer integer = (Integer) v.nextElement();
System.out.print(integer + " ");
}
System.out.println();
//把一个map集合中的所有键值对都添加到具体的hashtable集合中
numbers.putAll(map);
Enumeration<String> v2 = numbers.keys();
System.out.print("添加map以后的所有key:");
while (v2.hasMoreElements()) {
String str = (String) v2.nextElement();
System.out.print( str + " ");
}
Enumeration<Integer> v3 = numbers.elements();
System.out.print("添加map以后的所有value:");
while (v3.hasMoreElements()) {
Integer integer = (Integer) v3.nextElement();
System.out.print( integer + " ");
}
System.out.println();
//清除hashtable中的所有key
//numbers.clear();
//创建一个hashtable的浅克隆,hashtable自身的所有结构层次都会被复制
//但是key和value是不会被复制的。返回值类型是一个对象
numbers.clone();
//返回hashtable中的所有key,以set集合的形式返回
Set<String> set = numbers.keySet();
for (String string : set) {
System.out.print(string + " ");
}
System.out.println();
//以键值对的形式返回hashtable中的键值对,等号的左边是key,等号右边是value
Set<Entry<String, Integer>> sm = numbers.entrySet();
for (Entry<String, Integer> entry : sm) {
System.out.print( entry + " ");
}
System.out.println();
Collection<Integer> res = numbers.values();
for(Integer result : res){
System.out.print(result + " ");
}
}
}


还没有评论,来说两句吧...