zoukankan      html  css  js  c++  java
  • Java集合包(十)——Set的两个实现类

    一:HashSet

      1、特征

      1)HashSet 是一个没有重复元素的集合

      2)不保证元素的顺序,而且HashSet允许使用 null 元素

      3)HashSet是非线程安全的

      2、原理

    public class HashSet<E>
        extends AbstractSet<E>
        implements Set<E>, Cloneable, java.io.Serializable
    {
        static final long serialVersionUID = -5024744406713321676L;
    
        // HashSet是通过map(HashMap对象)保存内容的
        private transient HashMap<E,Object> map;
    
        // PRESENT是向map中插入key-value对应的value
        // 因为HashSet中只需要用到key,而HashMap是key-value键值对;
        // 所以,向map中添加键值对时,键值对的值固定是PRESENT
        private static final Object PRESENT = new Object();
    
        ......
    }

      原理很简单:HashSet中通过一个HashMap成员来保存数据,其中set的元素就是hashMap的key,而值则恒定使用一个final成员object对象来占位。

      由于hashMap的key是不允许重复的,因此保证了HashSet的元素不重复。

    二:TreeSet

      1、特征

      1)TreeSet 是一个有序的集合

      2)TreeSet是非线程安全的

      2、原理

    public class TreeSet<E> extends AbstractSet<E>
        implements NavigableSet<E>, Cloneable, java.io.Serializable
    {
        // NavigableMap对象:此处使用了多态,实际上它指向一个TreeMap实例
        private transient NavigableMap<E,Object> m;
    
        // TreeSet是通过TreeMap实现的,
        // PRESENT是键-值对中的值。
        private static final Object PRESENT = new Object();
    
        // 不带参数的构造函数。创建一个空的TreeMap
        public TreeSet() {
            this(new TreeMap<E,Object>());
        }
    
        // 将TreeMap赋值给 "NavigableMap对象m"
        TreeSet(NavigableMap<E,Object> m) {
            this.m = m;
        }
    
        // 带比较器的构造函数。
        public TreeSet(Comparator<? super E> comparator) {
            this(new TreeMap<E,Object>(comparator));
        }
    ......
    }

      原理很简单:TreeSet中使用了一个 NavigableMap 成员,它是TreeMap的基类,在构造函数中可以传入比较器创建一个TreeMap来存储set的元素并且借助treeMap的比较器来保证有序。

        

  • 相关阅读:
    Android音频(7)——项目实战——耳麦插拔
    Android音频(6)——音频系统分析
    Android音频(5)——框架中的概念和涉及的文件
    Android音频(4)——音频驱动实战
    Android音频(3)——ALSA声卡驱动——DAPM
    Android音频(2)——ALSA声卡驱动——ASoC
    Mvc中Session导致action不异步的问题
    RabbitMQ 声明Queue时的参数们的Power
    RabbitMQ 实现RPC
    RabbitMQ Topic exchange
  • 原文地址:https://www.cnblogs.com/ygj0930/p/13577901.html
Copyright © 2011-2022 走看看