容器源码解析之LinkedHashSet(六)
对于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(六)相关推荐
- php的lumen框架,Lumen框架“服务容器”源码解析
1.服务容器 "服务容器"是Lumen框架整个系统功能调度配置的核心,它提供了整个框架运行过程中的一系列服务."服务容器"就是提供服务(服务可以理解为系统运行中 ...
- 容器源码解析之HashMap(七)
再进入源码解析之前,先来看看hashMap的工作原理 当我们执行put存值时,hashmap会先调用key的hashcode方法的到哈希码,也就是桶的索引bucketIndex,找到该桶,然后遍历桶用 ...
- Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器绑定)
服务容器的绑定 bind 绑定 bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论过,bind 的绑定有三种: 绑定自身 绑定闭包 绑定接口 今天,我们这篇文章主要从源码上讲解 Ioc ...
- 容器源码解析之LinkedHashMap(九)
1.LinkedHashMap的继承结构 public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map&l ...
- 容器源码解析之容器全貌(一)
下面是一个简略的容器继承图 注:兰色为接口,草绿色为抽象类,红色为实现类 我将从实现类入手逐个分析容器实现类,来逐渐了解容器全貌 Collection容器 List容器 Vector Stack Ar ...
- Spring Bean的生命周期以及IOC源码解析
IOC源码这一块太多只能讲个大概吧,建议还是去买本Spring IOC源码解析的书来看比较好,我也是自己看源代码以及视频整理的笔记 Bean的生命周期大概可以分为四个阶段,具体的等会再说,先看看IOC ...
- webserver接口_SpringBoot内置源码解析WebServer初始化过程
WebServer 初始化过程 在上一节中 Spring Boot 初始化了 WebServer 对应的工厂类.同时,我们也知道对应 Web容器的WebServer实现类有:TomcatWebServ ...
- Soul网关源码解析目录
Soul网关源码解析目录 Soul网关源码解析文章列表 对用Java写的高性能网关:Soul,进行一波学习和研究,下面是相关的文章记录 掘金 了解与初步运行 Soul网关源码解析(一) 概览 ...
- 源码解析 使用tomcat作为web容器时,用到的外观模式
源码解析 使用tomcat作为web容器时,接收浏览器发送过来的请求, tomcat会将请求信息封装成ServletRequest对象, 如下图①处对象. 但是大家想想ServletRequest是一 ...
最新文章
- 【OpenCV 4开发详解】均值滤波
- php 简单模板引擎,PHP 实现简单的模板引擎
- 简单了解SSL/TLS协议
- 电子工程师过去1年的点点滴滴
- 基于Spark的Als算法+自迭代+Spark2.0新写法
- linux配置文件为yum,yum的配置文件说明
- 流露人间的情回忆儿童节
- linux账号和权限管理思维导图,Linux系统支持的思维导图软件有哪些?
- SEO学习步骤--SEO入门第一章
- PHP数据库扩展 - PDO操作
- 数据可视化应用在哪方面
- 项目owner看这里,MaxCompute全表扫描新功能,给你“失误”的机会
- 基于Matlab的车牌号识别
- Visual studio2012密钥 vs2012密钥 本人亲测 真实有效
- html5的项目报告项目背景,项目可行性研究报告范本
- wxPython 俄罗斯方块游戏
- darknetYolov3图片的分类计数、置信度以及输出xmin,xmax,ymin,ymax的结果
- 使用javamail、阿里云邮箱发送邮件
- 搜狗推送软件搜狗收录详细教程
- 用Python写一个天天酷跑