LinkedHashSet

重点:

LinkedHashSet 不允许重复元素,与 HashSet的区别是:它是有序的

LinkedHashSet 底层结构是 数组table + 双向链表

【介绍】

public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable

LinkedHashSet 是 HashSet 的子类

LinkedHashSet 底层结构是 数组table + 双向链表

LinkedHashSet根据元素的 hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这样做的意义或者好处就是LinkedHashSet中的元素顺序是可以保证的,也就是说遍历序和插入序是一致的。

不允许添加重复元素


【使用】

参照 Set接口的方法


【底层分析】

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

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

(3)添加 add 机制与 HashSet一样;

(4)如此一来, LinkedHashSet 能确保插入顺序和遍历顺序一致。

(5)LinkedHashSet 底层维护的是一个 LinkedHashMap (是HashMap的子类);

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

(7)数组是 HashMap¥Node[] 类型,存放的元素/数据是 LinkedHashMap¥Entry类型

Java集合-LinkedHashSet的更多相关文章

  1. Java集合之LinkedHashSet源码分析

    1.简介 我们知道Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.根据源码实现中的注释我们可以知道LinkedHashSet是具有可预知迭代顺序的Set接 ...

  2. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

  3. 死磕 java集合之LinkedHashSet源码分析

    问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashS ...

  4. 【Java集合系列四】HashSet和LinkedHashSet解析

    2017-07-29 16:58:13 一.简介 1.Set概念 Set可以理解为集合,非常类似数据概念中的集合,集合三大特征:1.确定性:2.互异性:3.无序性,因此Set实现类也有类似的特征. 2 ...

  5. Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别

    本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...

  6. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  7. Java 之 LinkedHashSet 集合

    一.概述 java.util.LinkedHahset 集合 extends HashSet 集合 在HashSet下面有一个子类java.util.LinkedHashSet,它的底层是一个哈希表( ...

  8. java 集合(四)HashSet 与 LinkedHashSet

    查看源码: HashSet底层new 了HashMap 哈希表的结构: Demo: package cn.sasa.demo2; import java.util.HashSet; import ja ...

  9. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  10. Java集合的10个最常见问题

    以下是一些在Stackoverflow上经常被问起的与Java集合相关的问题.在你查阅这些问题之前,最好先去看看[Simple Java]Java集合框架的接口和类层次关系结构图. 什么时候优先选择L ...

随机推荐

  1. android defaluthttpclient timeout 整理

    android defaulthttpclient 超时无效的相关解放方式记录: With the marked solution I am still getting a UnknownHostEx ...

  2. .net code 3.0 获取配置文件 json 和 config 中的值

    using Microsoft.Extensions.Configuration;using Microsoft.Extensions.FileProviders; using System.IO; ...

  3. VS2010配置WTL

    1.首先去下载WTL 地址:http://wtl.svn.sourceforge.net/viewvc/wtl/?view=tar 2.安装App Wizard 找到"VS安装目录\VC\V ...

  4. htmlApk:一个轻松在线打包生成双端app应用的网站

    htmlApk平台,基于HTML打包制作APP,只要有手机网站或者HTML文件,3分钟即可生成app多端应用,同时拥有苹果版和安卓版双系统APP,快速进入移动互联时代. 全面支持h5网址打包,可设置图 ...

  5. Amd,Cmd, Commonjs, ES6 import/export的异同点

    Amd,Cmd, Commonjs, ES6 import/export等均是模块化方案 1.Commonjs使用在Nodejs上,加载模块是同步的. 2.Amd是requirejs在推广过程中对模块 ...

  6. uniapp离线打包安卓未配置appkey或配置错误

    按照这4步检查都没问题 1.查看签名文件是否配置到了主APP的build.gradle. signingConfigs { config { keyAlias 'newPt' keyPassword ...

  7. ptyhon基础课程_2

    10 输入 # 例一 user_name = input ("请输入姓名:") message = user_name + "shaobing" print ( ...

  8. 安装kubernetes dashboard以及用户授权

    kubernetes 版本v1.25.3 1.安装 版本查看:https://github.com/kubernetes/dashboard/releases kubectl apply -f htt ...

  9. Linux修改主机名hostname

    红帽系: [root@f112 ~]# vi /etc/sysconfig/network # Created by anaconda # 加上一行 HOSTNAME=f111 [root@f112 ...

  10. 【git】3.4 git分支-分支开发工作流

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E5%BC%80%E5%8F%91% ...