1.线程是否安全:HashMap是非线程安全的,Hashtable是线程安全的(Hashtable内部的方法基本都是用synchronized修饰的),所以HashMap的效率比Hashtable高。 2.对Null key 和Null value的支持:HashMap支持键为null,但这样的键只有一个,但是可以一个键或者多个键对应的值为null。 3.初始容量大小和每次扩充容量的大小:①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小。 4.底层数据结构:JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。

相关推荐

牛客网
牛客企业服务