对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。

LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap来实现,在相关操作上与父类HashSet的操作相同,直接调用父类HashSet的方法即可。LinkedHashSet的源代码如下:

public class LinkedHashSet<E>  extends HashSet<E>  implements Set<E>, Cloneable, java.io.Serializable {  private static final long serialVersionUID = -2851667679971038690L;  /** * 构造一个带有指定初始容量和加载因子的新空链接哈希set。 * * 底层会调用父类的构造方法,构造一个有指定初始容量和加载因子的LinkedHashMap实例。 * @param initialCapacity 初始容量。 * @param loadFactor 加载因子。 */  public LinkedHashSet(int initialCapacity, float loadFactor) {  super(initialCapacity, loadFactor, true);  }  /** * 构造一个带指定初始容量和默认加载因子0.75的新空链接哈希set。 * * 底层会调用父类的构造方法,构造一个带指定初始容量和默认加载因子0.75的LinkedHashMap实例。 * @param initialCapacity 初始容量。 */  public LinkedHashSet(int initialCapacity) {  super(initialCapacity, .75f, true);  }  /** * 构造一个带默认初始容量16和加载因子0.75的新空链接哈希set。 * * 底层会调用父类的构造方法,构造一个带默认初始容量16和加载因子0.75的LinkedHashMap实例。 */  public LinkedHashSet() {  super(16, .75f, true);  }  /** * 构造一个与指定collection中的元素相同的新链接哈希set。 *  * 底层会调用父类的构造方法,构造一个足以包含指定collection * 中所有元素的初始容量和加载因子为0.75的LinkedHashMap实例。 * @param c 其中的元素将存放在此set中的collection。 */  public LinkedHashSet(Collection<? extends E> c) {  super(Math.max(2*c.size(), 11), .75f, true);  addAll(c);  }
}

在父类HashSet中,专为LinkedHashSet提供的构造方法如下,该方法为包访问权限,并未对外公开。

 * 以指定的initialCapacity和loadFactor构造一个新的空链接哈希集合。 * 此构造函数为包访问权限,不对外公开,实际只是是对LinkedHashSet的支持。 * * 实际底层会以指定的参数构造一个空LinkedHashMap实例来实现。 * @param initialCapacity 初始容量。 * @param loadFactor 加载因子。 * @param dummy 标记。 */
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}

容器源码解析之LinkedHashSet(六)相关推荐

  1. php的lumen框架,Lumen框架“服务容器”源码解析

    1.服务容器 "服务容器"是Lumen框架整个系统功能调度配置的核心,它提供了整个框架运行过程中的一系列服务."服务容器"就是提供服务(服务可以理解为系统运行中 ...

  2. 容器源码解析之HashMap(七)

    再进入源码解析之前,先来看看hashMap的工作原理 当我们执行put存值时,hashmap会先调用key的hashcode方法的到哈希码,也就是桶的索引bucketIndex,找到该桶,然后遍历桶用 ...

  3. Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器绑定)

    服务容器的绑定 bind 绑定 bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论过,bind 的绑定有三种: 绑定自身 绑定闭包 绑定接口 今天,我们这篇文章主要从源码上讲解 Ioc ...

  4. 容器源码解析之LinkedHashMap(九)

    1.LinkedHashMap的继承结构 public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map&l ...

  5. 容器源码解析之容器全貌(一)

    下面是一个简略的容器继承图 注:兰色为接口,草绿色为抽象类,红色为实现类 我将从实现类入手逐个分析容器实现类,来逐渐了解容器全貌 Collection容器 List容器 Vector Stack Ar ...

  6. Spring Bean的生命周期以及IOC源码解析

    IOC源码这一块太多只能讲个大概吧,建议还是去买本Spring IOC源码解析的书来看比较好,我也是自己看源代码以及视频整理的笔记 Bean的生命周期大概可以分为四个阶段,具体的等会再说,先看看IOC ...

  7. webserver接口_SpringBoot内置源码解析WebServer初始化过程

    WebServer 初始化过程 在上一节中 Spring Boot 初始化了 WebServer 对应的工厂类.同时,我们也知道对应 Web容器的WebServer实现类有:TomcatWebServ ...

  8. Soul网关源码解析目录

    Soul网关源码解析目录 Soul网关源码解析文章列表     对用Java写的高性能网关:Soul,进行一波学习和研究,下面是相关的文章记录 掘金 了解与初步运行 Soul网关源码解析(一) 概览 ...

  9. 源码解析 使用tomcat作为web容器时,用到的外观模式

    源码解析 使用tomcat作为web容器时,接收浏览器发送过来的请求, tomcat会将请求信息封装成ServletRequest对象, 如下图①处对象. 但是大家想想ServletRequest是一 ...

最新文章

  1. 【OpenCV 4开发详解】均值滤波
  2. php 简单模板引擎,PHP 实现简单的模板引擎
  3. 简单了解SSL/TLS协议
  4. 电子工程师过去1年的点点滴滴
  5. 基于Spark的Als算法+自迭代+Spark2.0新写法
  6. linux配置文件为yum,yum的配置文件说明
  7. 流露人间的情回忆儿童节
  8. linux账号和权限管理思维导图,Linux系统支持的思维导图软件有哪些?
  9. SEO学习步骤--SEO入门第一章
  10. PHP数据库扩展 - PDO操作
  11. 数据可视化应用在哪方面
  12. 项目owner看这里,MaxCompute全表扫描新功能,给你“失误”的机会
  13. 基于Matlab的车牌号识别
  14. Visual studio2012密钥 vs2012密钥 本人亲测 真实有效
  15. html5的项目报告项目背景,项目可行性研究报告范本
  16. wxPython 俄罗斯方块游戏
  17. darknetYolov3图片的分类计数、置信度以及输出xmin,xmax,ymin,ymax的结果
  18. 使用javamail、阿里云邮箱发送邮件
  19. 搜狗推送软件搜狗收录详细教程
  20. 用Python写一个天天酷跑

热门文章

  1. 用特征码秒杀各程序语言按钮事件
  2. 详解Windows内存分页机制
  3. 深入理解DPDK程序设计|Linux网络2.0
  4. Union-Find 并查集算法详解
  5. 【今晚七点半】:爱奇艺DRM探索之路
  6. 一文看懂WebTransport
  7. WebRTC:应用中最大难点在于根据业务需求的适当折中
  8. JVM之强引用、软引用、弱引用、虚引用
  9. JVM之Java栈Java stack
  10. 直播预约 | 揭秘微信支付背后的数据库技术