zoukankan      html  css  js  c++  java
  • Java容器:Set

    Set和数学中的集合十分类似,在Java中,Set是一种绝不会包含两个相等元素的存储结构。在阅读此文前请阅读Java容器:Map

    Set方法

    增添方法:

    • boolean add(E e);
    • boolean addAll(Collection c);将参数容器与该Set对象做并集。
      查询方法:
    • int size();
    • boolean isEmpty();
    • boolean equals(Object o);
    • Iterator<E> iterator();对Set对象迭代需要使用迭代器。
    • boolean contains(Object o);查询集合中是否包括某个对象。
    • boolean containsAll(Collection c);查询该集合是否包括参数容器对象中所有对象。
    • Object[] toArray();
    • <T> T[] toArray(T[] a);
      删除方法:
    • boolean remove(Object o);
    • boolean removeAll(Collection c);用Set对象减去参数容器中对象,即差集,返回值用于确认集合是否改变。
    • boolean retainAll(Collection c);将参数容器与该Set对象做交集,即保留下共同内容,返回值用于确认集合是否改变。
    • void clear();

    HashSet

    HashSet底层用一个HashMap对象来存储内容,因此,可以说它是包装过的HashMap。也因此,HashSet和HashMap的构造函数类似,都可以使用初始容量initialCapacity和负载因子loadFactor对其初始化(对于HashSet,会在构造函数中对其所属的HashMap对象初始化)。同样的原因,对于Map中可以使用的方法,Set大多照旧。此外,由于HashMap对象的Entry需要key,value两个参数,而Set对象仅需要key参数来存储,系统会构建一个new Object()对象PRESENT来作为HashMap中Entry的value。

        private transient HashMap<E,Object> map;
        private static final Object PRESENT = new Object();
    

    可以说HashSet就是一个只用key存储的HashMap。

    TreeSet

    和HashSet类似,TreeSet底层也是用Map实现的,TreeSet类有两个成员对象:

        private transient NavigableMap<E,Object> m;
        private static final Object PRESENT = new Object();
    

    这里面用的NavigableMap我们学过Map后知道是TreeMap的上层接口,实际上还是一个TreeMap。

    综上,在系统了解Map后学习Set,仅需要学习Set的使用即可。

  • 相关阅读:
    java内存管理的一些基础,内存溢出的解决方案
    设计模式中类的关系 .
    一个很郁闷的问题,Java中的僵死进程
    quartzscheduler的集群化配置
    转 : 敏捷开发的原则 .
    如何进行单元测试
    欢迎来到地狱 WriteUp(2019暑假CTF第一周misc)
    20181218小黄衫获得感想和阶段性总结
    2019暑假Java学习笔记(一)
    2019“嘉韦思杯”3.30初赛一部分Write Up
  • 原文地址:https://www.cnblogs.com/cielosun/p/6719709.html
Copyright © 2011-2022 走看看