专业的JAVA编程教程与资源

网站首页 > java教程 正文

集合篇-HashSet(JAVA)

temp10 2025-01-10 17:14:59 java教程 9 ℃ 0 评论

前言

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

案例使用

源码分析

1、new HashSet<>();

集合篇-HashSet(JAVA)

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

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。类似一个占位的作用。

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表