java集合——Set

Set接口无序(意味着不能通过下标读取),并且不允许重复元素。与Set接口相关的部分UML类图如下:

其主要实现类为:HashSet、LinkedHashSet、TreeSet。

HashSet

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

1、HashSet内部使用HashMap,HashSet集合内部所有的操作基本上都是基于HashMap实现的,所以HashSet中的元素是无序的。
2、HashSet中的元素作为HashMap的 key,value就是这个 PRESENT 。

LinkedHashSet

1、LinkedHashSet继自HashSet,其构造时调用HashSet的构造方法,但是内部却是用的LinkedHashMap。

    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }

    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

2、它跟HashSet一样,把value做为一个dummy的object,然后结合key元素,放入LinkedHashMap里。

TreeSet

1、TreeSet实现的是NavigableSet接口,但NavigableSet接口继承自SortedSet接口,SortedSet接口继承自Set接口。
2、TreeSet虽然使用的是NavigableMap,但无参构造函数里,NavigableMap便是TreeMap。

private transient NavigableMap<E, Object> backingMap;

public TreeSet() {
    backingMap = new TreeMap<E, Object>();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.Set 上一篇,我们介绍Java中的List集合。本篇,让我们继续学习,来了解下Set集合; Set继承于Co...
    贾博岩阅读 83,768评论 4 52
  • 1 Set集合主要源码分析 上一篇,我们介绍了Java集合框架中的Set集合,主要讲了HashSet和TreeSe...
    贾博岩阅读 1,220评论 0 6
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,288评论 0 16
  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 745评论 0 1
  • 一、Set集合特性 Set集合不允许存储重复元素 无序集合,存储的顺序和取出顺序不同 没有下标 使用传统的for遍...
    比轩阅读 501评论 0 1