java HashMap是一个数组和链表组成的。
链表:一条线性的,通过某些算法指向数组的index(int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % table.length;)
hash:不是唯一对应与key的,可能多个key指向同一个hash
table[index]:table就是数据,table[index]就是一个链表
Entry:this.key= key;
this.value= value;
this.hash= hash;
this.next= next; //它的后一个 这样一个接着一个形成链表
在put的时候通过key,然后使用算法得到index,然后判断数组的这个index项是否有key了,如果有了是否有同一个key(因为是链表),如果同样就是覆盖。如果没有就新建一个,并且他永远是链表的头(table[index] =newHashMapEntry(key,value,hash,table[index]);)
参考资料:
boy00fly.iteye.com/blog/1139845
网友评论