数组+链表
一个node中存储key-value对,以及链表中下一个node的指针。
存储过程
一个key-value过来,使用hashcode()函数根据key计算出hashcode,然后拿hashcode的高16位和低16位相异或。然后这个hashcode就作为key-value对,即数组的下标,如果当前下标已经有一个node了,就把这个node接到前面那个node的下面链表。
异或(相同为0,不同为1)
因为int类型是4字节,32位,所以拿高16位和低16位异或。得到一个16位数。好处是可以充分利用到这个hashcode的所有位。
红黑树
常说hashmap的底层是红黑树,那么是哪里用到了红黑树呢?
就是链表,当单链表的长度达到一个阈值后,查找效率就太低了,所以需要改成查找二叉树,这里用的是红黑树。