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

  • 相关阅读:
    K
    A
    2017 Multi-University Training Contest
    第一章 概述
    校赛F 比比谁更快(线段树)
    POJ 3683 Priest John's Busiest Day
    POJ 2186 Popular Cows
    第十五周讨论
    线段树模板(单点更新,区间更新,RMQ)
    2-SAT问题(白书)
  • 原文地址:https://www.cnblogs.com/perferect/p/13790100.html
Copyright © 2011-2022 走看看