java 集合 HashMap
ashMap的存储接口是底层有1个Node<K,V>[] table数组,然后根据key的hash值找到定位的下标,然后存到数组里面。如何key的hash值是一样的,但是value不一样的话,他添加的节点就是Node链表的下一个节点。
所以hashMap 查询和删除比较快,他直接根据key找到hash值,这边会根据hash值是去数组里面找,还是在node的链表里面找,所以一个hash算法很重要,如果hash算法不好的,导致链表很长的话,那么比较慢了。
HashMap 把Node<K,V>[] table 加了transient ,这样让他不进行序列化这个参数,是因为他里面重写了readObject和writeObject。因为不同的jvm在实现hashcode不一样。因为HashMap的存储的位置是根据key的hash值存储的。所以重写了序列化的方法。
这边HashMap new的时候可以带参数,这边设置Node的初始化容量的时候最好是2的幂方,如果不是的话,系统会自动帮你算出2的幂方。
首先说下Map接口
Map接口有1个内部接口Entry,这个接口有获取key的方法,获取value的方法等等。。
HashMap 有1个内部类,Node,他实现了Entry这个接口,他是一个单向链表
Node 实现
循环