HashMap与HashTable的不同点有两个方面
第一个是关于是否能够存放NULL值的方面:
呕心沥血的准备了一例子:
import java.util.HashMap;
import java.util.Hashtable;
public class Test_hashmap_hashtable {
public static void main(String[] args) {
HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
hashMap.put(null, null);// 表达式一
hashMap.put(null, 1);// 表达式二
hashMap.put(1, null);// 表达式三
System.out.println(hashMap.size());
/**
* ==========================================
* 得到的值为2,那么就是在hashmap里面只存储了两个键值对; 表达式一:说明了hashmap类,存储的数据允许使用null值和null键
* 表达式一和表达式二:说明了键值的唯一性,当之后出现相同的键值的时候,讲替换掉之前的键值
* ==========================================
*/
Hashtable<Integer, Integer> hashtable = new Hashtable<Integer, Integer>();
try {
hashtable.put(null, null);//表达式四
} catch (NullPointerException e) {
System.out.print("发生空指针异常:表达式四\t");
}
try {
hashtable.put(null, 1);//表达式五
} catch (NullPointerException e) {
System.out.print("发生空指针异常:表达式五\t");
}
try {
hashtable.put(1, null);//表达式六
} catch (NullPointerException e) {
System.out.print("发生空指针异常:表达式六\t");
}
hashtable.put(1, 1);//表达式七
System.out.println(hashtable.size());
/**
* =============================================
*得到的结果如下:
*发生空指针异常:表达式四 发生空指针异常:表达式五 发生空指针异常:表达式六 1
*得到结论是:
*hashtable里面的键和值,两者都不能为NULL;
* =============================================
*/
}
}
第二方面是在是否能够同步。在多线程下的,不同线程对对象的操作所造成数据不同的,发生不安全的现象,这类现象在数据库上面好像叫脏读。
是hashmap接口下的两个方法get()和set()方法 他们的修饰词不是 Synchronize的
例子不会,举了半天举不出来