Java Map
Map无论在Java编程或者面试中,都占用很重要的地位,这里试图聊聊相关的概念,看看是否能够理清楚相关的思路。 HashMap HashMap 是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示: 新添加的元素通过取模的方式,定位 Table 数组位置,然后将元素加入链表头部,这样下次提取时就可以快速被访问到。 访问数据时,也是通过取模的方式,定位数组中的位置,然后再遍历链表,依次比较,获取相应的元素。 如果 HasMap 中元素过多时,可能导致某个位置上链表很长。原本 O(1) 查找性能,可能就退化成 O(N) ,严重降低查找效率。 为了避免这种情况,当 HasMap 元素数量满足以下条件时,将会自动扩容,重新分配元素。 1// size:HashMap 中实际元素数量 2//capacity:HashMap 容量,即 Table 数组长度,默认为:16 3//loadFactor:负载因子,默认为:0.75 4 size>=capacity*loadFactor HasMap 将会把容量扩充为原来的两倍,然后将原数组元素迁移至新数组。 1void transfer(Entry[] newTable, boolean rehash) { 2 int newCapacity = newTable.length; 3 for (Entry<K,V