zoukankan      html  css  js  c++  java
  • Java 之 Set 源码分析

    一、HashSet

      构造方法:

    HashSet() :构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75
    

       源码:

    二、LinkedHashSet

      构造方法:

    LinkedHashSet(): 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set
    LinkedHashSet(int initialCapacity) :构造一个带指定初始容量和默认加载因子 (0.75) 的新空链接哈希 set
    

       源码:

     

     

    三、TreeSet

      构造方法:

    TreeSet() :构造一个新的空 set,该 set 根据其元素的自然顺序进行排序
    TreeSet(Comparator<? super E> comparator) :构造一个新的空 TreeSet,它根据指定比较器进行排序

      源码:

      总结:

       1、Set 的内部实现其实是一个 Map,即HashSet的内部实现是一个HashMap,TreeSet的内部实现是一个TreeMap,LinkedHashSet的内部实现是一个LinkedHashMap。

       2、但是 Set 中只有一个元素,又是怎么变成(key,value)的呢?

          以 HashSet 的 add 方法为例:

         原来是,把添加到 Set 中的元素作为内部实现 map 的 key,然后用一个常量对象 PRESENT 对象,作为value。

         所有的 HashSet 共用同一个PRESENT对象,所有的 TreeSet 共用同一个 PRESENT对象,所有的 LinkedHashSet 共用同一个 PRESENT 对象。

        这是因为 Set 的元素不可重复和 Map 的 key 不可重复有相同特点。Map 有一个方法 keySet() 可以返回所有 key。

  • 相关阅读:
    2020-2-21 牛客试题复盘
    Java核心技术36讲读书笔记(5~8讲)
    2020-2-21 牛客试题复盘
    Java核心技术36讲读书笔记(1~4讲)
    2020-2-20 牛客试题复盘
    2020-2-19 牛客试题复盘
    2020-2-18 牛客试题复盘
    P4213 【模板】杜教筛(Sum)
    「SDOI2015」约数个数和(莫比乌斯反演)
    Crash的数字表格(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/niujifei/p/12077968.html
Copyright © 2011-2022 走看看