Collection集合-05.HashSet

       在集合使用中,我们经常会用到HashSet,一般用于过滤一组数据,保证数据唯一。今天看一下HashSet的源码,之前看过HashMap,再来看,HashSet可以说是很简单了。

源码分析

初始化

  • 底层是通过HashMap存储数据的。

  • PRESENT成员变量用于HashMap的value值

private transient HashMap<E,Object> map;

private static final Object PRESENT = new Object();

public HashSet() {
    map = new HashMap<>();
}

增删改查操作

  • 增加操作
public boolean add(E e) {
     return map.put(e, PRESENT)==null;//判断是否首次插入数据
}
  • 删除操作
 public boolean remove(Object o) {
      return map.remove(o)==PRESENT;//判断删除的数据是否预给定的数据
  }
  • 数据查询(通过HashMap主键遍历)
 public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

总结

  • 通过上面其实也不难看出来,HashSet和HashMap的缘分不浅。

    • HashSet中存储的数据是存放在HashMap的key,value都是同一个静态成员变量;

    • 由于上面说的特性,HashSet中存放的数据是不会出现重复的现象。

    • 也因为本质其实是HashMap进行处理,所以会有对编程而言,数据存放是“无序”而内部实质是“有序”的情况。

posted @ 2020-10-10 10:02  PerfectLi  阅读(104)  评论(0编辑  收藏  举报