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 实现

 

循环

 

posted @ 2018-04-12 11:17  tangw  阅读(149)  评论(0编辑  收藏  举报