您的位置 首页 java

集合篇-HashSet(JAVA)

前言

HashSet是Set接口的一个实现类,实际上它是 hashMap 的实例,不保证顺序,且非线程安全的。 jdk 文档中也足以说明这一点。而HashSet常用的方法有add, remove, contains和size。

案例使用

源码分析

1、new HashSet<>();

 //  private  transient  HashMap <E,Object> map;
//这里也足以说明HashSet是个HashMap实例,那么是怎么实现的呢?
//下面会有分析
public HashSet() {
    map = new  Hash Map<>();
}  

2、 java .util.HashSet#add

 //这里直接调用了map的put方法,e就是key
//那么PRESENT是啥?原来PRESENT=new Object
// private  static  final Object PRESENT = new Object();
public  boolean  add(E e) {
    return map.put(e, PRESENT)==null;
}  

3、java.util.HashSet#remove

 public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}  

4、java.util.HashSet#contains

 public boolean contains(Object o) {
    return map.containsKey(o);
}  

5、java.util.HashSet#size

 public int size() {
    return map.size();
}  

6、java.util.HashSet# Iterator

 //说明 迭代器 是迭代了map的keySet
//从HashMap的源码分析可以知道,key是不可以重复的
//所以HashSet是不存在重复的值
public Iterator<E> iterator() {
    return map.keySet().iterator();
}  

总结

HashSet是HashMap的实例,HashSet存储的数据是不可重复的。且HashSet很多方法都直接调用HashMap的方法。HashSet的值是HashMap的key,而HashMap的值是一个Object。类似一个占位的作用。

喜欢这样做源码解析的同学,可以点赞、关注+收藏,后期还会推出其他框架源码分析。

如果有补充的地方,留言区见。

文章来源:智云一二三科技

文章标题:集合篇-HashSet(JAVA)

文章地址:https://www.zhihuclub.com/186795.shtml

关于作者: 智云科技

热门文章

网站地图