zoukankan      html  css  js  c++  java
  • 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进行处理,所以会有对编程而言,数据存放是“无序”而内部实质是“有序”的情况。

  • 相关阅读:
    你欠我的幸福,怎么弥补
    爱,请你走开
    一生为你
    爱你到底
    粒子滤波简介(转载)
    关于小波变换和Gabor变换的一些知识!
    基于Opencv的MeanShift跟踪算法实现
    opencv学习网页
    基于OpenCV库的Gabor滤波器的实现
    Mean Shift算法(CamShift)
  • 原文地址:https://www.cnblogs.com/perferect/p/13790100.html
Copyright © 2011-2022 走看看