Java基础之Set

前言

今天学习java基础类型Set,解剖Set的底层实现。

一、Set子类

Set接口继承自Collection接口,存放不重复的一组数据,根据是否需要排序,可以分别选用HashSet或者TreeSet,其中HashSet用于无序存储场景,而TreeSet有序保存数据。
Collection
└Set
 ├HashSet
 │ └LinkedHashSet
 └SortedSet
  └NavigableSet
   └TreeSet

1.1 HashSet与LinkedHashSet

HashSet底层使用HashMap作为存储的数据结构(关于Map结构下期会详细说明),key为对象本身,value为一个空的Object对象。LinkedHashSet与HashSet类似,只是基础数据结构由HashMap变成了LinkedHashSet而已。

public HashSet() {
    map = new HashMap<>(); //初始容量16,加载因子0.75
}
public HashSet(int initialCapacity);
public HashSet(int initialCapacity, float loadFactor);
HashSet(int initialCapacity, float loadFactor, boolean dummy); //构建LinkedHashSet
public HashSet(Collection<? extends E> c);  //从其他集合构建Set

//添加数据,首次添加返回true,否则返回false
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

1.2 SortedSet、NavigableSet和TreeSet

SortedSet和NavigableSet接口主要提供排序Set的取值或者取子集,具体实现可以参考TreeSet。(根据接口说明可以发现有序结合为升序排列)

// SortedSet
SortedSet<E> subSet(E fromElement, E toElement);  //某个范围的子集
SortedSet<E> headSet(E toElement);    //小于toElement的子集
SortedSet<E> tailSet(E fromElement);   //大于等于fromElement的子集
E first();  //返回第一个元素
E last();  //返回最后一个元素

// NavigableSet
E lower(E e);    //小于e的子集
E floor(E e);     //小于等于e的子集
E higher(E e);  //大于e的子集
E ceiling(E e);  //大于等于e的子集
E pollFirst();     //返回第一个元素并移除
E pollLast();     //返回最后一个元素并移除

二、总结

查看源码后发现Set底层主要是有Map结构实现,今天作为一个引子,简单介绍Set的主要方法和分类,后续会补充Map的详细介绍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容