java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java的LinkedHashSet

Java中LinkedHashSet的底层机制详解

作者:风过无痕2018

这篇文章主要介绍了Java中LinkedHashSet的底层机制解读,   LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现,此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,需要的朋友可以参考下

LinkedHashSet的底层机制

1.在LinkedHastSet中维护了一个hash表和双向链表(LinkedHashSet有head 和tail )

2. 每一个节点有pre和next属性,这样可以形成双向链表

3. 在添加一个元素时,先求hash值,在求索引.确定该元素在hashtable的位置,然后将添加的元素加入到双向链表(如果已经存在,不添加[原则和hashset一样])

tail.next = newElement //简单指定
newElement.pre = tail
tail = newEelment;

4. 这样的话,我们遍历LinkedHashSet 也能确保插入顺序和遍历顺序一致

节点之间的连接示意图

在这里插入图片描述

解读

在这里插入图片描述

在这里插入图片描述

 Entry的结构

     //继承关系是在LinkedHashMap的内部类完成.
     static class Entry<K,V> extends HashMap.Node<K,V> {
         Entry<K,V> before, after;
         Entry(int hash, K key, V value, Node<K,V> next) {
             super(hash, key, value, next);
         }
     }  ```

加入时链表的连接情况

在这里插入图片描述

在这里插入图片描述

此时head和tail的指向

在这里插入图片描述

最后before和after之间的关系

在这里插入图片描述

到此这篇关于Java中LinkedHashSet的底层机制详解的文章就介绍到这了,更多相关Java的LinkedHashSet内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文