jdk7的文字描述(会在中间介绍一些8的改变):
-
将key1,value1(就是一个键值对Entry)添加到数组中,首先根据key1所在累的hashCode()方法计算key1的哈希值1,然后使用某种算法,得到哈希值2,(个人理解是两次计算哈希值是为了让得到的哈希值相同的概率更小些),哈希值2在使用indexFor()
方法得到底层table数组中存放的位置:index(0<=index &&index <= 15);
【1.在jdk8中,当使用了空参构造器创建对象时,底层并没有创建长度为16的数组,2.而是当我们首次调用put()函数时底层才会首先创建长度为16的数组,3.底层创建的数组为:Node[](classNode implements Map.Entry{},这里与jdk7有所不同】 -
如果index位置没有元素,则直接把key1,value1这个键值对添加进去(添加成功1)
-
如果index位置有元素(key2,value2)【我在这里只考虑只存在一对键值对,实际上是会存在多个键值对的,对应的把多个键值对考虑进来就好】,则比较key1和key2的哈希值。
--------------如果两者的哈希值不同,则(key1,value1)添加成功 (添加成功2)
--------------如果两者的哈希值相同,则调用key1所在类的e