Java集合-HashSet(一)
来源:互联网 发布:九阴绝学暗器数据 编辑:程序博客网 时间:2024/06/07 05:02
HashSet源码分析
先上源码
package java.util;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(); /** * 构建了一个新的,空的hashmap实例;支持HashMap实例具有默认初始容量(16)和负载因子(0.75)。 */ public HashSet() { map = new HashMap<>(); } /** * 构造一个空HashMap与指定的初始容量(c.size()/.75f) + 1, 16的最大值)和默认的加载因子(0.75)。 * 并将c的值添加到map中 */ public HashSet(Collection<? extends E> c) { map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } /** * 调用hashMap(int,float) * 构造一个空HashMap与指定的初始容量和加载因子。 */ public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } /** * 调用hashMap(int) * 构造一个空HashMap与指定的初始容量和默认的加载因子(0.75)。 */ public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); } /** * 构建一个空的LinkedHashMap */ HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); } /** * 返回map.keySet()的迭代器 */ public Iterator<E> iterator() { return map.keySet().iterator(); } /** * map的大小 */ public int size() { return map.size(); } public boolean isEmpty() { return map.isEmpty(); } /** * map是否包含这个key */ public boolean contains(Object o) { return map.containsKey(o); } /** * map添加一个key */ public boolean add(E e) { return map.put(e, PRESENT)==null; } /** * 删除一个key */ 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(); } } /** * 保存这个好实例的状态到一个流(即它序列化) */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { // Write out any hidden serialization magic s.defaultWriteObject(); // Write out HashMap capacity and load factor s.writeInt(map.capacity()); s.writeFloat(map.loadFactor()); // Write out size s.writeInt(map.size()); // Write out all elements in the proper order. for (E e : map.keySet()) s.writeObject(e); } /** * 重建好的实例从一个流(即,它反序列化)。 */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization magic s.defaultReadObject(); // Read in HashMap capacity and load factor and create backing HashMap int capacity = s.readInt(); float loadFactor = s.readFloat(); map = (((HashSet)this) instanceof LinkedHashSet ? new LinkedHashMap<E,Object>(capacity, loadFactor) : new HashMap<E,Object>(capacity, loadFactor)); // Read in size int size = s.readInt(); // Read in all elements in the proper order. for (int i=0; i<size; i++) { E e = (E) s.readObject(); map.put(e, PRESENT); } }}
从源码可以看出,hashset底层就是hashmap的一个特例(只存储key),所以他的特点就和hashmap是一样的。这也是他的集合元素唯一性的保证。
阅读全文
1 0
- Java集合-HashSet(一)
- Java HashSet集合初探(一)
- Java基础面试题(一)集合,hashmap,hashtable,hashset
- Java框架集合-Set(HashSet)
- Java 集合:Collection 系列(HashSet)
- java.集合(Ⅲ).Set.HashSet
- Java 集合:Collection 系列(HashSet)
- Java集合系列(9)--HashSet
- java集合(5):HashSet源码分析
- Java集合框架(1)hashset
- Java 集合框架-HashSet
- java基础--HashSet集合
- java集合(HashSet)
- Java集合之HashSet
- java集合之HashSet
- java中的HashSet集合
- java集合-HashSet
- java集合------HashSet
- (转载) Faster RCNN详解
- 用户管理系统
- 线性表的链式表示和实现(链式)
- 统计学习方法(一)
- [VIJOS1233]@.@多边形面积
- Java集合-HashSet(一)
- Linux安装SVN服务器及配置步骤
- Spark开发调优
- Orcle多行数据变一行
- 使用html+css实现一个个人照片墙
- KMP算法详解
- 5-引用的本质分析
- 1037. 在霍格沃茨找零钱(20)
- .NET 内存监测(Ants Memory Profiler)