Java集合框架_HashMap和Hashtable的区别
1、线程是否安全:Hash Map是非线程安全的,Hash Table是线程安全的,Hash Table的内部方法基本上都经过了synchronized修饰,如果你要保证线程安全的话就使用ConcurrentHashMap吧。
2、效率:因为线程安全问题,HashMap要比HashTable效率高一点,另外,Hash Table基本上被淘汰,不要在代码中使用它。
3、对Null Key和Null Value的支持:HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null,但是在HashTable中put进的键值只要有一个null,直接抛出NullPointerException。
4、初始容量大小和每次扩充容量的大小不同:
创建时如果不指定容量的初始值,Hashtable默认的初始大小为11,之后每次扩充,容量变成原来的2n+1.Hash Map默认初始大小是16.之后每次扩充,容量会变成原来的2倍。
创建时如果给了初始容量,那么Hashtable会直接使用你给定的大小,而Hash Map会将其扩充大2的幂次方大小。也就是说HashMap总是使用使用2的幂次方作为哈希表大小。后面将介绍为什么是2的幂次方
5、底层数据结构:JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。

浙公网安备 33010602011771号