10. HashMap和HashTable的区别

2016/9/27 16:43 下午 posted in  Java comments

Map
├Hashtable
├HashMap
└WeakHashMap

HashMap和HashTable都是Java中哈希表的实现方式。其中HashTable里的大多数方法比如add、remove..等前有synchronized修饰,所以它在多线程的环境下是线程安全的,也因此需要耗费性能在同步的问题上。而HashMap不是,所以它的效率较HashTable高。
HashMap中可以使用null作为key,这在HashTable中是不允许的。
HashMap中的contains方法因为语义不明改为containsKey()和containsValue()。
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

HashMap Hashtable
null作为key
contains() 改为containsKey() constainsValue() 继承Dicitionary
线程安全 否 效率较高 是 效率较低
迭代 iterator enumeration
hash性能 几乎一样 使用hashcode()方法
hash值 (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 直接hashcode方法的值