Java HashMap底层实现原理
HashMap底层是哈希表(散列表),哈希就是一个数组,数组的每个元素是一个单向链表。
● 在第一次执行put方法时,给哈希表的数组(哈希桶)默认初始化,容量: 16
● hashMap加载因子是0.75
● 当hashMap中<键,值>对的数量 > 哈希桶容量 * 加载因子时, 哈希桶(数组)要扩容 , 按2倍大小扩容
● HashMap可以指定初始化容量, 系统会自动调整为2的幂次方, 可以快速的计算数组的下标
● 如果单向链表中结点的个数超过8个时, 系统会自动的把单向链表转换为树形结构
HashTable和HashMap的区别
● 与HashMap一样,底层也是哈希表, 但是HashTable是线程安全的
● HashMap默认初始化容量: 16, HashTable默认初始化容量:11
● 加载因子: 0.75, 当键,值对的数量大于加载因子*哈希桶容量时, 要扩容
● HashMap默认按2倍大小扩容, HashTable默认按 2倍 + 1 大小扩容
● HashMap可以指定初始化容量, 系统会自动调整为2的幂次方, HashTable也能指定初始化容量, 系统不会自动调整
● HashMap中的键与值都可以为null, HashTable中的键与值都不能为null
● HashMap的父类是AbstractMap , HashTable的父类是Dictionary