1. LinkedHashSet概述:
LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。
注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。
2. 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通过继承HashSet,底层使用LinkedHashMap,以很简单明了的方式来实现了其自身的所有功能。
参考:http://zhangshixi.iteye.com/blog/673319
分享到:
相关推荐
·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...
通过上述分析,我们不仅了解了决策树的基本原理,还深入了解了其在Java中的具体实现方式。这对于理解和开发实际的决策树模型非常有帮助。在未来的学习和实践中,还可以进一步探索更多高级特性,如剪枝技术、随机森林...
在Java编程中,HashSet是一种不允许存储重复元素的集合,它实现了Set接口。HashSet是通过HashMap来实现的,其底层使用HashMap...掌握HashSet的实现原理对于Java开发者在实际编程中合理地选择和使用集合类具有重要意义。
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...
"深入Java集合学习系列:LinkedHashSet的实现原理 - 莫等闲 - ITeye技术网站.mht"将介绍如何在HashSet的基础上添加链表结构以保持元素顺序。 通过这个系列的学习,开发者可以更好地理解Java集合框架的底层机制,...
Java集合框架是Java编程语言中的一个核心部分,它为数据结构和对象的存储、管理和操作提供了统一的接口和实现。这个框架包括了多种类型的集合,如List、Set、Queue和Map,以及它们的各种实现类,如ArrayList、...
- **HashMap和HashTable**:线程安全问题,以及HashMap的实现原理。 - **Set接口**:HashSet、LinkedHashSet和TreeSet的特点及用途。 - **Map接口**:了解key-value存储结构,以及常用的实现类。 5. **多线程** ...
HashMap是Map接口的主要实现,从Java 8开始,HashMap的实现原理有所改变,引入了红黑树来优化性能。 总结而言,这份面试知识点整理为Java开发者提供了一个全面、系统的复习框架,帮助面试者巩固和加深对Java核心...
- Set接口及其实现类HashSet、TreeSet、LinkedHashSet - Map接口及其实现类HashMap、ConcurrentHashMap 6. Java并发编程: - 线程的基本概念和线程状态 - 各种垃圾收集器的特点与使用场景,如Serial、ParNew、...
在深入理解Java时,了解JVM(Java虚拟机)的工作原理是至关重要的,因为它是Java代码能够跨平台运行的关键。 JVM是Java程序的运行环境,它将编译后的字节码转换为特定操作系统下的机器指令。JDK(Java Development ...
根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map...在面试中,理解并能够熟练运用这些集合类及其实现原理是非常重要的。
1. Java 中语法糖原理、解语法糖 并发编程 1. 什么是线程,与进程的区别 2. 阅读源代码,并学会使用Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、...
Java提供了多种Set接口的实现,如HashSet、TreeSet和LinkedHashSet。 1. HashSet:这是最常用的Set实现,它不保证元素的顺序,允许使用null值,但不允许元素重复。HashSet内部使用哈希表来存储元素,因此添加、删除...
2. **Set接口**:包括HashSet(基于哈希表实现)、TreeSet(基于红黑树实现)、LinkedHashSet(维护插入顺序)。 3. **Map接口**:包括HashMap(基于数组+链表+红黑树实现)、ConcurrentHashMap(线程安全,JDK8...
Java核心知识点整理面试宝典是一份覆盖Java基础知识的面试准备指南,其中包含了Java集合框架、Java虚拟机(JVM)的深入探讨、Java多线程和高并发处理、Java I/O模型及阻塞队列原理等重要知识点。以下是对这些知识点...
本指南将深入探讨HashMap、HashSet、HashTable、LinkedHashMap、LinkedHashSet、ArrayList、LinkedList、ConcurrentHashMap等主要集合类的实现原理,以及它们在实际应用中的选择与比较。 首先,HashMap是最常用的...
3. **集合框架**:Java集合框架包括List(如ArrayList、LinkedList)、Set(如HashSet、LinkedHashSet)和Map(如HashMap、TreeMap)。理解它们之间的区别和用途,以及如何操作它们是Java开发中的重要技能。 4. **...