Java集合-LinkedHashSet
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的更多相关文章
- Java集合之LinkedHashSet源码分析
1.简介 我们知道Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.根据源码实现中的注释我们可以知道LinkedHashSet是具有可预知迭代顺序的Set接 ...
- Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)
Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...
- 死磕 java集合之LinkedHashSet源码分析
问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashS ...
- 【Java集合系列四】HashSet和LinkedHashSet解析
2017-07-29 16:58:13 一.简介 1.Set概念 Set可以理解为集合,非常类似数据概念中的集合,集合三大特征:1.确定性:2.互异性:3.无序性,因此Set实现类也有类似的特征. 2 ...
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别
本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...
- Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java 之 LinkedHashSet 集合
一.概述 java.util.LinkedHahset 集合 extends HashSet 集合 在HashSet下面有一个子类java.util.LinkedHashSet,它的底层是一个哈希表( ...
- java 集合(四)HashSet 与 LinkedHashSet
查看源码: HashSet底层new 了HashMap 哈希表的结构: Demo: package cn.sasa.demo2; import java.util.HashSet; import ja ...
- Java集合概述
容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...
- Java集合的10个最常见问题
以下是一些在Stackoverflow上经常被问起的与Java集合相关的问题.在你查阅这些问题之前,最好先去看看[Simple Java]Java集合框架的接口和类层次关系结构图. 什么时候优先选择L ...
随机推荐
- airtest截图后放在allure报告里面。
#需要导入的包 from airtest.aircv import * from airtest.aircv.utils import cv2_2_pil screen1 = G.DEVICE.sna ...
- VirtualBox上使用qemu和busybear搭建RISCV环境
Step 1:安装一些编译riscv需要的库: sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr ...
- CCIE DC Multicast Part 4.
Hi Guys, Part 4 of my CCIE DC multicast article is presented below, in this article we are going to ...
- Firefox彻底禁用自动更新提示
实验版本:96 安装目录下新建文件夹:distribution 新建文件:policies.json 文件内容为: { "policies": { "DisableApp ...
- Python-闭包(Closure)
一.认识闭包 有时候需要在函数外部得到函数内部的局部变量,但是由于Python作用域的关系,这一点是无法实现的. def f(): n = 22 print(n) #NameError:name 'n ...
- 【驱动 】frambuffer中显示屏参数的修改
1.在x210板子的kernel中,默认LCD显示屏是800*400的,修改在 kernel/arch/arm/mach-s5pv210/mach-x210.c 中 258行 #define S5PV ...
- 51电子-STC89C51开发板:程序烧录(刷写) 到 IC 设置
全部内容,请点击: 51电子-STC89C51开发板:<目录> --------------------------- 正文开始 --------------------------- ...
- 3 - 标准数据加密(DES)及其备选
标准数据加密(DES)及其备选 我的博客 原书:<Understanding Cryptography: A Text book for Students and Practitioners&g ...
- linux扩展与缩减lv大小
在线扩展lv 给vg添加新的pv并扩展lv大小 将新加磁盘生成pv pvcreate /dev/sdd 将pv加入vg vgextend vg_name /dev/sdd 先扩展lv物理边界,大小增加 ...
- html入門 如何 區別行級元素 和 塊級元素
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...