美文网首页
Java基础之Set

Java基础之Set

作者: love小胖 | 来源:发表于2018-09-21 23:38 被阅读0次

前言

今天学习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的详细介绍。

相关文章

  • Java基础之Set

    前言 今天学习java基础类型Set,解剖Set的底层实现。 一、Set子类 Set接口继承自Collection...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • Android面试复习笔记 6

    11.Java基础 1. 集合 List,Set,Queue和Map。List,Set,Queue都是接口,他们都...

  • Set——你真的了解吗?

    JAVA 基础 :Set——你真的了解吗? 简述 Set 继承于 Collection ,是一种集合。有元素无序、...

  • 培训文档

    java基础 集合List:ArrayList,LinkedListSet:HashSet,Li...

  • 集合的一些源码分析

    java基础 hashmap原理 Java集合说一说吧set ,list,map都问了一遍 java中util包下...

  • Java面试题

    Java基础 容器 1.Java容器都有哪些 总体分为Collection 、Map,细分为List、Set、Ma...

  • Java基础之LinkedHashMap源码解析

    Java集合源码解析系列 Java基础之HashMap源码解析 Java基础之HashTable源码解析 Java...

  • java面试题1

    java基础 List和Set的区别答:Set:不包含重复元素的Collection。List:有顺序的colle...

  • Java基础之LinkedList源码解析

    Java集合源码解析系列 Java基础之HashMap源码解析 Java基础之LinkedHashMap源码解析 ...

网友评论

      本文标题:Java基础之Set

      本文链接:https://www.haomeiwen.com/subject/asttoftx.html