Set相关实现类的源码解析(JDK1.8)

概念

Set具有与Collection完全一样的接口,因此没有任何额外的功能。
存入Set的每个元素都必须是唯一的,因为Set不保存重复元素

Set的架构图

Set的架构图

Set相关

  • Set 是继承于Collection的接口。它是一个不允许有重复元素的集合

  • Set不支持快速获取,只能通过迭代器进行遍历

HashSet

  • 继承关系:HashSet -> AbstractSet 实现 Set接口

  • HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素

  • HashSet的元素都存到HashMap键值对的Key上面,而Value时有一个统一的值private static final Object PRESENT = new Object();

  • HashSet的实现

对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下

TreeSet

  • 继承关系:TreeSet -> AbstractSet 实现 Set接口

  • TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是"TreeMap的实例"

参考文献: