码迷,mamicode.com
首页 > 编程语言 > 详细

Java 之 Set 源码分析

时间:2019-12-21 20:29:59      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:实现   highlight   比较   顺序   info   style   不可   java   lin   

一、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。

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

Java 之 Set 源码分析

标签:实现   highlight   比较   顺序   info   style   不可   java   lin   

原文地址:https://www.cnblogs.com/niujifei/p/12077968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!