Collection探究之HashSet
来源:互联网 发布:cmd mysql utf8 乱码 编辑:程序博客网 时间:2024/06/03 19:25
HashSet存储元素的本质是利用HashMap的方法存储,所以存储的元素是无序的,不可重复的,每个存入的元素都是独一无二的,在HashSet中不允许存储null值。下面,我们来看下HashSet的源码。
1. HashSet的定义
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
可以看到,HashSet继承于AbstractSet,实现了Set,Cloneable,Serializable接口。AbstractSet的最终父类还是Collection,所以HashSet继承了大部分Collection的方法。
2.HashSet的属性
//可以看到在HashSet中有一个HashMap类型的属性,所以HashSet的底层是利用HashMap来存储数据的,利用了hash的唯一性来存储key。private transient HashMap<E,Object> map;//PRESENT是用于统一存放入HashMap中的value值,因为HashSet只存储key,所以Value由PRESENT来填充。private static final Object PRESENT = new Object();
3.HashSet构造方法
//没有参数的构造方法,实例化一个HashMappublic HashSet() { map = new HashMap<>(); } //根据给定的Collection类型的参数c进行初始化,其中扩容比为0.75 public HashSet(Collection<? extends E> c) { map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } //和HashMap的构造函数相同 public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } //只需要出入初始化大小的构造函数 public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); } //与上面相同,一般dummy不用管。 HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
4.HashSet常用方法
从源码中可以看到HashSet的方法基本上都是调用了HashMap的方法
//调用HashMap的keySet()方法的iterator()方法来对key进行遍历 public Iterator<E> iterator() { return map.keySet().iterator(); } //调用了HashMap的size方法 public int size() { return map.size(); } //判断是否为空 public boolean isEmpty() { return map.isEmpty(); } //因为HashSet里存的都是key,所以只需判断key是否存在 public boolean contains(Object o) { return map.containsKey(o); } //在HashSet中add方法是调用了HsahMap的put方法,只存key的值。 public boolean add(E e) { return map.put(e, PRESENT)==null; } //移除方法也是调用了HashMap的remove方法 public boolean remove(Object o) { return map.remove(o)==PRESENT; } public void clear() { map.clear(); }
0 0
- Collection探究之HashSet
- Collection探究之ArrayList
- Collection探究之LinkedList
- Collection探究之Vector
- Collection探究之HashMap
- Java基础之集合框架(一)--Collection、List、LinkedList、HashSet
- Java基础之集合框架(一)--Collection、List、LinkedList、HashSet
- 【java编程】Collection类之HashSet存储自定义对象元素
- Collection之Set及其子类HashSet、LinkedHashSet、TreeSet:
- Collection--Set--hashSet
- HashSet(Collection<? extends E> c)
- Set、Collection、List、SortedSet、HashSet
- 集合( LinkedList,HashSet,Collection ) 总结
- LinkedList、HashSet、Collection集合体系
- <java API源码初体验>4---collection集合之HashSet原理分析
- Java高级之集合与泛型>Collection、Set、HashSet、LinkedHashSet、TreeSet
- 从Collection c = new HashSet()到多态
- Java 集合:Collection 系列(HashSet)
- 当CodeIgniter遇到Nginx报404错误的解决办法
- windows 一个进程(Process)最多可以生成多少个线程(Thread)
- android-改变状态栏字体颜色
- 关于空指针访问类成员函数
- CA.pl
- Collection探究之HashSet
- 操作系统开发之——一个简单的Bootsect(改进版)
- 数据结构排序总结
- Android小项目之利用百度地图定位获取当前城市
- 生成视频任意帧的缩略图
- [深入理解Java虚拟机]第十二章 Java内存模型与线程-硬件的效率与一致性
- 编译器架构的王者LLVM——(4)简单的词法和语法分析
- 【软工文档总结之前6个文档(重点篇)】
- Mac上获取耗电量相关信息