Java基础–Map集合
HashMap与HashTable的区别
- 线程安全:HashMap非线程安全,HashTable非线程安全的,因为hashTable内部方法基本经过synchronized修饰
- 效率:HashMap因为非线程安全,执行效率比HashTable高一点(但HashTable现在基本不用了)
- kv是否可为空:HashTable不允许,HashMap允许有一个null的键,但可以允许有多个null的值
- 初始值与扩容:
- HashTable:初始默认11,若给定了初始值就使用给定值,扩容2n+1
- HashMap:初始默认16,若给定初始值不够2的幂次方,则自动扩充为2的幂次方,(也就是说HashMap总是以2的幂来作为哈希表的大小)扩容2n
- 底层数据结构:
- HashTable:数组+链表
- HashMap:数组+链表(Jdk1.8以前)