之前没用过HashSet,听到别人提到HashSet,看了下源码,HashSet基本是将HashMap进行了一层封装,通过一个静态变量实现了不允许存储相同key
add方法实现
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
private static final Object PRESENT = new Object();
每个存入的key,在HashMap中的value是一个静态对象,当下次再存入时,如果原来已经存入过时,map.put(K,V)会返回一个oldValue不为null,即添加失败,但是map中实际上进行了一次更新;
LinkedHashSet实现原理
LinkedHashSet继承HashSet,在HashSet里面有这样一个构造函数
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
LinkedHashSet初始化时,会调用HashSet的这个构造函数,那么LinkedHashSet使用了LinkedHashMap的实现
这么看呢,LinkedHashSet的遍历速度要比HashSet高
分享到:
相关推荐
总的来说,HashSet的实现原理是通过委托给HashMap来实现元素的存储、管理和操作。它充分利用了HashMap高效的数据结构特性,为Java集合框架中实现无序集合提供了一个高效的选择。掌握HashSet的实现原理对于Java开发者...
在Java语言中,HashSet类是集合框架的重要组成部分,属于Set接口的一个实现。它基于哈希表的原理来存储不重复的元素...如果需要一个有序集合,可以考虑使用LinkedHashSet类,它在HashSet的基础上维护了元素的插入顺序。
在Java编程语言中,集合类是用于存储一组...在黑马程序员_毕向东_Java基础视频教程中,你可能会更详细地学习到关于HashSet的实现原理和实战技巧。通过观看相关视频和实践操作,可以加深对HashSet的理解,提升编程能力。
"深入Java集合学习系列:LinkedHashSet的实现原理 - 莫等闲 - ITeye技术网站.mht"将介绍如何在HashSet的基础上添加链表结构以保持元素顺序。 通过这个系列的学习,开发者可以更好地理解Java集合框架的底层机制,...
今天我们将深入探讨“集合”的概念及其应用,以及HashSet如何保证数据不重复的原理。 首先,集合是一种可以容纳多个对象的容器,这些对象可以是任意类型,只要它们实现了特定接口,如Comparable或Serializable。...
HashSet类实现了Set接口,其内部基于HashMap来存储和管理元素。这意味着HashSet的性能和特性与HashMap紧密相关。由于HashMap使用哈希表结构,HashSet能够快速地插入、查找和删除元素,时间复杂度通常为O(1)。 ...
- **Set接口**:同样继承自Collection接口,特点是元素无序且唯一,常见的实现类有HashSet和LinkedHashSet。 - **Map接口**:存储键值对的数据结构,键Key唯一,无序,常见的实现类有HashMap、TreeMap和...
Set集合是JavaSE中的一种重要数据结构,主要包括HashSet、TreeSet和LinkedHashSet三个子类。下面我们将对Set集合的原理、特点、使用场景等进行详细的探索和分析。 HashSet HashSet是Set集合中的一种重要实现类,...
LinkedHashSet与HashSet相似,但保留了插入顺序,通过维护一个双向链表来实现。 TreeSet则实现了SortedSet接口,内部使用红黑树数据结构,保证元素有序。我们可以使用自定义的比较器或对象的自然排序规则进行排序。...
4. **LinkedHashSet实现**:LinkedHashSet继承于HashSet,并且通过维护一条双向链表来记录插入顺序,因此提供了元素插入顺序的保持。它的底层实现是LinkedHashMap,后者是基于HashMap和双向链表的实现。 5. **...
* HashSet和LinkedHashSet都是基于哈希表实现的,但是LinkedHashSet还维护了元素的插入顺序 3. 快慢指针方法的使用 * 快慢指针方法用于解决链表中间节点的访问问题 四、Java框架和数据库 1. Spring中的循环依赖...
ava基础 基础知识 面向对象基础 Java基本数据类型 string和包装类 final关键字特性 Java类和包 抽象类和接口 ...Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
Set接口继承自Collection接口,并提供了多种实现类,如HashSet、LinkedHashSet、TreeSet和CopyOnWriteArraySet等。这些实现类各自有不同的特性和使用场景。 1. 实现类详解: - `CopyOnWriteArraySet`:这个类基于`...
`LinkedHashSet`则在保持元素插入顺序的同时提供`HashSet`的功能。`TreeSet`则是基于红黑树的实现,提供了排序功能。 `Queue`接口代表了先进先出(FIFO)的数据结构,`ArrayDeque`和`LinkedList`都可以作为队列使用...
Set接口的主要实现类包括HashSet、LinkedHashSet和TreeSet。HashSet底层使用HashMap来存储元素,所以它是无序且没有索引的,元素具有唯一性。LinkedHashSet基于HashSet,并额外维护了一个双向链表记录插入顺序,而...
本指南将深入探讨HashMap、HashSet、HashTable、LinkedHashMap、LinkedHashSet、ArrayList、LinkedList、ConcurrentHashMap等主要集合类的实现原理,以及它们在实际应用中的选择与比较。 首先,HashMap是最常用的...
HashSet去除重复元素的原理是通过元素的hashCode和equals方法。首先,根据对象的hashCode()方法确定对象在HashSet中的位置;然后,如果两个对象的hashCode相同,会调用equals()方法来判断它们是否相等。只有当两个...
Set接口主要有三种实现类:`HashSet`、`LinkedHashSet`以及`TreeSet`。 ##### 1.1 认识Set集合的特点 - **HashSet**:基于哈希表的实现,不保证元素的顺序,不允许重复元素。 - **LinkedHashSet**:基于哈希表和...
- Set接口的主要实现类有HashSet、LinkedHashSet和TreeSet。 - HashSet是基于HashMap实现的,插入效率高,但不保证元素的顺序。 - LinkedHashSet在HashSet的基础上,通过链表维护了元素的插入顺序。 - TreeSet则...