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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决SpringMVC获取请求参数乱码问题

    解决SpringMVC获取请求参数乱码问题

    在使用SpringMVC和thymeleaf进行请求参数处理时,可能会遇到乱码问题,对于GET方法乱码,可通过修改Tomcat的server.xml文件,添加URIEncoding="UTF-8"解决,而POST方法乱码,则需在web.xml配置SpringMVC提供的过滤器
    2024-11-11
  • SpringBoot 文件上传和下载的实现源码

    SpringBoot 文件上传和下载的实现源码

    这篇文章主要介绍了SpringBoot 文件上传和下载的实现源码,代码简单易懂非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • 优雅地在Java应用中实现全局枚举处理的方法

    优雅地在Java应用中实现全局枚举处理的方法

    这篇文章主要给大家介绍了关于如何优雅地在Java应用中实现全局枚举处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • idea构建web项目的超级详细教程

    idea构建web项目的超级详细教程

    好多朋友在使用IDEA创建项目时,总会碰到一些小问题,下面这篇文章主要给大家介绍了关于idea构建web项目的超级详细教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • java 关键字static详细介绍及如何使用

    java 关键字static详细介绍及如何使用

    这篇文章主要介绍了java 关键字static详细介绍及如何使用的相关资料,需要的朋友可以参考下
    2017-03-03
  • SpringAop如何通过某个子类切父类

    SpringAop如何通过某个子类切父类

    这篇文章主要介绍了SpringAop如何通过某个子类切父类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring cloud Gateway简介及相关配置方法

    Spring cloud Gateway简介及相关配置方法

    这篇文章主要介绍了Spring cloud Gateway简介及相关配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • hystrix服务降级方法使用介绍

    hystrix服务降级方法使用介绍

    什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
    2022-09-09
  • ThreadLocal内存泄漏问题解决方案

    ThreadLocal内存泄漏问题解决方案

    这篇文章主要介绍了ThreadLocal内存泄漏问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot+MinIO实现对象存储方式

    SpringBoot+MinIO实现对象存储方式

    这篇文章主要介绍了SpringBoot+MinIO实现对象存储方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论