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的比较器来保证有序。

        

  • 相关阅读:
    Map的两张遍历方法 keySet(),entrySet()
    http://localhost:8080请求用户名和密码。信息为:“XDB” 解决办法
    redis 集群出现的错误
    通信 缩略词
    redis
    hadoop 概念
    mysql 集群的一些概念
    SQL 基本关键字 函数 关联 连接
    JAVA集合
    SQL.Cookbook 读书笔记5 元数据查询
  • 原文地址:https://www.cnblogs.com/ygj0930/p/13577901.html
Copyright © 2011-2022 走看看