Java基础理解 之 HashMap
1. Q:HashMap 实现原理 A:利用key的hashCode计算出数组的下标。存储时会出现两种情况,也就是key值相同与不相同,相同的情况下会覆盖原数据,不同时则在计算好的hashcode下标位置把值放到链表中。获取则是通过hashCode的下标,再进一步判断key是否相同,从而在链表中找到对应的值。当存储超过现有容量则扩容,可以把每个空间理解为桶,桶越多执行效率越快,以空间换时间。 源码解读: static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final int MAXIMUM_CAPACITY = 1 << 30; //最大容量 static final float DEFAULT_LOAD_FACTOR = 0.75f; //填充比 static final int TREEIFY_THRESHOLD = 8; //当add一个元素到某个桶,其链表长度达到8时将链表转换为红黑树 static final int UNTREEIFY_THRESHOLD = 6; static final int MIN_TREEIFY_CAPACITY = 64; transient Node<k,v>[] table; //存储元素的数组 transient Set<map.entry<k,v>>