Java集合之LinkedHashSet详解

 更新时间:2023年09月04日 09:25:03   作者:AI训练师  
这篇文章主要介绍了Java集合之LinkedHashSet详解,LinkedHashSet是HashSet的子类,实现了Set接口,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表,需要的朋友可以参考下

LinkedHashSet

  • LinkedHashSet是HashSet的子类,实现了Set接口
  • LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表
  • LinkedHashSet根据元素的HashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入的顺序保存的
  • 不允许添加重复元素

在这里插入图片描述

Set  set = new LinkedHashSet();
set.add(new String("AA"));
set.add(456);
set.add(456);
set.add(new Employee("刘",1001));
set.add(123);
set.add("hello")

在这里插入图片描述

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

底层是LinkedHashMap,HashMap的子类

2)每个结点有before和after属性,这样可以形成双向链表

3)在添加一个元素时,先求hash值,再求索引,确定该元素在table的位置,然后将添加的元素加入到双向链表,如果已经存在,就不添加,和HashSet一样。

head指向第一个结点,tail指向最后一个结点

示例代码:

tail.next = newElement;
newElement.pre = tail;
tail = newElement;

4)这样以后,遍历LinkedHashSet也能确保插入顺序和遍历顺序一样

5)第一次添加元素时,直接将table数组扩容到16,存放的结点类型为LinkedHashMap$Entry

6)数组table是HashMap$Node[ ],存放的元素/数据是LinkedHashMap $Entry类型

Entry类型,继承关系,构成多态数组

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);
        }
    }

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

相关文章

  • Java聊天室之实现一个服务器与多个客户端通信

    Java聊天室之实现一个服务器与多个客户端通信

    这篇文章主要为大家详细介绍了Java简易聊天室之实现一个服务器与多个客户端通信,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • 学习java编程后可以走哪些职业道路

    学习java编程后可以走哪些职业道路

    在本篇文章里给大家介绍了关于学习java后的职业道路,以及需要学习的相关知识内容,有兴趣的朋友们可以跟着学习下。
    2022-11-11
  • SpringMVC实现注解式权限验证的实例

    SpringMVC实现注解式权限验证的实例

    本篇文章主要介绍了SpringMVC实现注解式权限验证的实例,可以使用Spring MVC中的action拦截器来实现,具有一定的参考价值,有兴趣的可以了解下。
    2017-02-02
  • Java并发编程深入理解之Synchronized的使用及底层原理详解 下

    Java并发编程深入理解之Synchronized的使用及底层原理详解 下

    在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile
    2021-09-09
  • 远程连接Jedis和整合SpringBoot的详细过程

    远程连接Jedis和整合SpringBoot的详细过程

    这篇文章主要介绍了远程连接Jedis和整合SpringBoot的详细过程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 详解JAVA设计模式之适配器模式

    详解JAVA设计模式之适配器模式

    这篇文章主要介绍了JAVA设计模式之适配器模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解
    2020-06-06
  • Java软件编程培训机构靠谱吗

    Java软件编程培训机构靠谱吗

    随着网络信息化的快速发展,Java培训受到越来越多人的青睐,目前Java工程师的薪资水平在不断攀升,但是有好多企业还是招不到合适的人才,为什么呢
    2017-04-04
  • java实现学生成绩档案管理系统

    java实现学生成绩档案管理系统

    这篇文章主要为大家详细介绍了java实现学生成绩档案管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • java 实现取int型的第二个字节的数

    java 实现取int型的第二个字节的数

    这篇文章主要介绍了java 实现取int型的第二个字节的数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java深入分析讲解反射机制

    Java深入分析讲解反射机制

    反射是框架的灵魂,Java框架底层都是用反射机制+xml配置等来实现的,本文将通过示例详细讲解Java中的反射机制,感兴趣的小伙伴可以跟随小编学习一下
    2022-06-06

最新评论