Java基础–Map集合

HashMap与HashTable的区别

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