最高记录:速度:165.76
记录保持者:【仙极境六重】linching
文本名:Java基础部分面试题四(附白话答案)
文本总字数:455
文本内容:
9.HashMap底层实现原理和扩容机制JDK1.8以前:数组+单链表的组合,以键值对的方式存储元素。JDK1.8及以后:引入红黑树结构,添加元素时,若链表个数大于8,链表会转换为红黑树,反之小于6时会修剪或还原成链表结构。选择6和8可以有效防止频繁的链表和红黑树转换。扩容条件:存放新值的时候当前已有元素个数大于阈值。存放新值的时候当前存放数据发生hash碰撞(当前key计算的hash值换算出来的数组下标位置已经存在值)默认容量是16,负载因子0.75,所以扩容阈值是12。每次扩容的容量是原有的2倍。10.HashMap什么样的类适合作为键String最为常见,因为String对象不可变,且重写了equals和hashcode方法。不可变性是必要的,如果key的hashcode存入和获取是不一致,就无法找到。获取对象时需要用到equals和hashCode方法,正确的重写这两个方法是非常重要的,因为两个不相等的对象返回不同的hashCode的话,碰撞的几率就会小些,就可以提高HashMap的性能。