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方法的值 |