1. HashSet概述:
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。
2. HashSet的实现:
对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下:
- public class HashSet<E>
-
extends AbstractSet<E>
-
implements Set<E>, Cloneable, java.io.Serializable
- {
-
static final long serialVersionUID = -5024744406713321676L;
-
-
-
private transient HashMap<E,Object> map;
-
-
-
private static final Object PRESENT = new Object();
-
-
-
-
public HashSet() {
-
map = new HashMap<E,Object>();
- }
-
-
-
-
public HashSet(Collection<? extends E> c) {
-
map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
- addAll(c);
- }
-
-
-
-
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);
- }
-
-
-
-
public Iterator<E> iterator() {
-
return map.keySet().iterator();
- }
-
-
-
-
public int size() {
-
return map.size();
- }
-
-
-
-
public boolean isEmpty() {
-
return map.isEmpty();
- }
-
-
-
-
public boolean contains(Object o) {
-
return map.containsKey(o);
- }
-
-
-
-
public boolean add(E e) {
-
return map.put(e, PRESENT)==null;
- }
-
-
-
-
public boolean remove(Object o) {
-
return map.remove(o)==PRESENT;
- }
-
-
-
-
public void clear() {
- map.clear();
- }
-
-
-
-
public Object clone() {
-
try {
-
HashSet<E> newSet = (HashSet<E>) super.clone();
- newSet.map = (HashMap<E, Object>) map.clone();
-
return newSet;
-
} catch (CloneNotSupportedException e) {
-
throw new InternalError();
- }
- }
- }
分享到:
相关推荐
主要介绍了Java面试题 从源码角度分析HashSet实现原理?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
源码解析jdk7.0集合:HashSet的底层实现原理.pdf
主要介绍了Java面试题之HashSet的实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...
主要介绍了hashset去除重复值原理实例解析,具有一定借鉴价值,需要的朋友可以参考下。
Map接口有哪些实现类? 描述一下Map put的过程 如何得到一个线程安全的Map? HashMap有什么特点? ConcurrentHashMap是怎么分段分组的? ConcurrentHashMap是怎么分段分组的? 介绍LinkedHashMap的底层原理 请介绍...
24. 说一下 HashSet 的实现原理? 25. ArrayList 和 LinkedList 的区别是什么? 26. 如何实现数组和 List 之间的转换? 27. ArrayList 和 Vector 的区别是什么? 28. Array 和 ArrayList 有何区别? 29. 在 Queue 中...
包含四个文件:java 基础上 基础...HashMap 的实现原理 HashSet 的实现原理 ArrayList 和 LinkedList 的区别 为何Map接口不继承Collection接口 HashMap的底层实现原理 HashMap并发安全的问题 JDK1.8与JDK1.7的性能对比
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...
ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM Java 运行时内存划分 类加载机制 OOM 分析 垃圾回收 对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 ...
ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM Java 运行时内存划分 类加载机制 OOM 分析 垃圾回收 对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 ...
ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM Java 运行时内存划分 类加载机制 OOM 分析 垃圾回收 对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 ...
#2019--JAVA 新征程 看完涨薪2K+ ——>必刷面试题 面试题模块结构图 11. 抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些...24.说一下 HashSet 的实现原理? 25.rrayList 和 LinkedList 的区别是什么? 26.如何
24. 说一下 HashSet 的实现原理? 11 25. ArrayList 和 LinkedList 的区别是什么? 11 26. 如何实现数组和 List 之间的转换? 11 27. ArrayList 和 Vector 的区别是什么? 11 28. Array 和 ArrayList 有何区别? 12 ...
Java示例在Java中实现OOP概念的类这些类和方法是不变的WIP,它们的预期用途是展示用Java编写的OOP设计程序和原理。 已知的问题: RecursiveMethods.RecursiveProduct当前损坏。 这很可能仍然是一个已知问题,因为我...
Java的集合类总结,包括HashMap、HashSet、HashTable、LinkedHashMap、LinkedHashSet、ArrayList、LinkedList、ConcurrentHashMap的实现原理,很详实,面试的话可以认真看看
自动装箱实现原理?类型转换实现原理? 对 String 的了解? String 为什么要设计成不可变的? 列举 Java 的集合以及集合之间的继承关系? List、Set、Map 的区别? HashMap,HashTable,ConcurrentHashMap 实现原理...