HashSet定义
HashSet是在HashMap基础上实现的元素不重复的集合容器,定义如下:
......
private transient HashMap<E,Object> map;
......
其底层数据结构就是HashMap,数据以KEY的形式保存与map中。HashSet有如下三个构造函数:
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<E,Object>(initialCapacity, loadFactor);
}
public HashSet(int initialCapacity) {
map = new HashMap<E,Object>(initialCapacity);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap
<E,Object>(initialCapacity, loadFactor);
}
前两个构造函数,定义了底层数据结构为HashMap,第三个构造函数定义了底层数据结构为LinkedHashMap,事实上LinkedHashSet继承于HashSet,其构造函数为:
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
因此,LinkedHashSet底层的数据结构为LinkedHashMap。
总结
HashSet是在HashMap的基础上实现,LinkedHashSet是在LinkedHashMap基础上的实现,set中的方法包括遍历都是通过调用HashMap或LinkedHashMap上对应的方法来实现,是一种典型的代理模式。
分享到:
相关推荐
HashSet、LInkedHashSet的使用和特点
本文主要探讨了三种基于Set接口的实现类:HashSet、LinkedHashSet和TreeSet,它们各自有不同的特性和使用场景。 首先,HashSet是最基础的Set实现,它不保证元素的特定顺序,也不保证在多次操作后保持元素的顺序不变...
本文将深入探讨Java中四个主要的Set实现类:HashSet、LinkedHashSet、TreeSet以及EnumSet。 首先,Set集合的核心特性是不存储重复元素。在尝试通过`add()`方法添加相同元素时,如果集合中已经存在该元素,`add()`...
- HashSet与LinkedHashSet的实现原理 - Collection与Iterable接口 - 泛型的使用与限制 5. **第5章:异常处理** - 异常分类:检查异常与运行时异常 - try-catch-finally结构 - throws关键字与throw语句 - ...
与 HashSet 不同的是,LinkedHashSet 保留了元素插入的顺序,并且具有 HashSet 的快速查找特性。下面是关于 LinkedHashSet 的一些重要信息: 有序性:LinkedHashSet 中的元素按照插入顺序进行排序,即元素被添加到...
- HashSet与LinkedHashSet:无序性与有序性的差异。 5. **多线程** - 线程的创建:通过Thread类和Runnable接口创建线程。 - 线程状态:新建、运行、阻塞、等待、终止等状态转换。 - 线程同步:synchronized...
- HashSet与LinkedHashSet:比较其存储和遍历的不同。 3. **多线程**: - 线程创建:通过Thread类和Runnable接口创建线程。 - 线程同步:熟悉synchronized关键字、wait/notify机制、ReentrantLock等工具。 - ...
- **HashSet与LinkedHashSet**:无序集合,学习它们的特性及使用场景。 5. **IO流**: - **字节流与字符流**:用于读写文件,理解二进制与文本的区别。 - **缓冲区**:提高读写效率,减少磁盘I/O操作。 - **...
4. HashSet与LinkedHashSet:比较两者的元素存储和遍历顺序。 五、并发编程 1. 线程:理解线程的创建、状态转换及同步控制。 2. volatile关键字:知道其在多线程环境中的作用。 3. synchronized:掌握synchronized...
- HashSet与LinkedHashSet:理解它们的区别,特别是有序性和唯一性。 3. **多线程**: - 线程的创建:通过Thread类和Runnable接口创建线程。 - 线程同步:熟悉synchronized关键字、wait()、notify()和notifyAll...
- **HashSet与LinkedHashSet**:无序和有序集合,以及元素唯一性保证。 5. **异常处理** - **异常分类**:检查异常和非检查异常的区别。 - **try-catch-finally**:异常捕获和处理结构。 - **throw与throws**:...
从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新集合与原集合顺序保持一致的实现方法 6:Stream去重(有序) Stream 实现去重功能和其他方法不同的是,它不用新创建集合,使用...
HashSet基于HashMap实现,但与HashMap不同的是,HashSet并不存储键(key),而是存储值(value),并且HashMap中键对应的值统一使用一个静态的、不变的Object实例来替代。这个静态实例被定义为HashSet的一个私有静态常量...
4. HashSet(int capacity, float fillRatio):除了初始容量,这个构造函数还允许用户定义一个填充比率(负载因子),它决定了当HashSet中的元素数量达到容量与填充比率的乘积时,HashSet的容量会进行扩展。...
// set容器接口的实现类有HashSet和 LinkedHashSet两个 // HashSet不保证迭代顺序, LinkedHashSet按照元素插入的顺序迭代. // 学习List对象容器的使用 // List容器中的对象允许重复 // 常用的list接口的实现类有...
Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)
* HashSet和LinkedHashSet都是基于哈希表实现的,但是LinkedHashSet还维护了元素的插入顺序 3. 快慢指针方法的使用 * 快慢指针方法用于解决链表中间节点的访问问题 四、Java框架和数据库 1. Spring中的循环依赖...
2. **HashSet与LinkedHashSet**:两者都是Set接口的实现,不存储重复元素。HashSet基于哈希表,插入和查找速度较快,但元素顺序不确定;LinkedHashSet则保持了元素插入的顺序,牺牲了一些性能。 3. **HashMap与...
Collection<Integer> intersection = CollUtil.intersection(hashSet, linkedHashSet); // 交集 Collection<Integer> union = CollUtil.union(hashSet, linkedHashSet); // 并集 Collection<Integer> disjunction = ...