zoukankan      html  css  js  c++  java
  • Java特殊数据结构-TreeSet

    资料来源
    1. TreeSet自然排序与比较器排序精讲 https://blog.csdn.net/xiaofei__/article/details/53138681
    2. TreeSet概念以及遍历方法 https://www.cnblogs.com/Tony-cheen/p/5681831.html
     
    1.TreeSet简介
    • TreeSet是JAVA中集合的一种有序集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。
    • 因为TreeSet继承了AbstractSet抽象类,所以它是一个set集合,可以被实例化,且具有set的属性和add、remove、get等方法。
    • TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序和比较器排序。
    • TreeSet的性能比HashSet差,简单比较:HashSet使用散列表进行存储,元素无序,元素允许为null。TreeSet是使用树结构来进行存储,元素按字符串顺序排序存储,元素不允许为null。
     
      TreeSet继承关系
    java.lang.Object
    ↳ java.util.AbstractCollection<E>
    ↳ java.util.AbstractSet<E>
    ↳ java.util.TreeSet<E>
    public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{}
    1、TreeSet继承于AbstractSet,并且实现了NavigableSet接口。
    2、TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是"TreeMap的实例"。
     
    2.TreeSet自然排序和比较器排序
     
        使用方式
    • a.自然顺序(Comparable)
      • TreeSet类的add()方法中会把存入的对象提升为Comparable类型
      • 调用对象的compareTo()方法和集合中的对象比较
      • 根据compareTo()方法返回的结果进行存储
    • b.比较器顺序(Comparator)
      • 创建TreeSet的时候可以制定 一个Comparator
      • 如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
      • add()方法内部会自动调用Comparator接口中compare()方法排序
      • 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
    • c.两种方式的区别
      • TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
      • TreeSet如果传入Comparator, 就优先按照Comparator
        TreeSet自然排序与比较器排序精讲 https://blog.csdn.net/xiaofei__/article/details/53138681
     
    3.TreeSet迭代方式和方法详解
    • TreeSet的遍历方式
    1.TreeSet顺序遍历
    for(Iterator iter = set.iterator(); iter.hasNext(); ) {
        iter.next();
    }
    2.Iterator顺序遍历
    // 假设set是TreeSet对象
    for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) {
      iter.next();
    }
    3.for-each遍历HashSet
    // 假设set是TreeSet对象,并且set中元素是String类型
    String[] arr = (String[])set.toArray(new String[0]);
    for (String str:arr)
    System.out.printf("for each : %s
    ", str);
    • TreeSet 的构造函数

    序号
    构造函数的说明
    1
    TreeSet ()
    此构造函数构造空树集,将在根据其元素的自然顺序按升序排序。
    2
    TreeSet (集合 c)
    此构造函数生成树的集合,它包含的元素的集合 c。
    3
    TreeSet (比较器 comp)
    此构造函数构造一个空树集,将根据给定的比较器进行排序。
    4
    TreeSet (SortedSet ss)
    此构造函数生成包含给定 SortedSet 的元素 TreeSet
    • TreeSet的方法总结

    修饰符和类型
    方法和描述
    boolean
    add(E e)
    将指定的元素添加到这套,如果它已不存在。
    boolean
    addAll(Collection<? extends E> c)
    在加入这一组指定的集合中添加的所有元素。
    E
    ceiling(E e)
    返回最小的元素在这一组大于或等于给定的元素,则null如果没有这样的元素。
    void
    clear()
    从这一组中移除所有元素。
    Object
    clone()
    返回此TreeSet实例浅表副本。
    Comparator<? super E>
    comparator()
    返回用于排序在这集,或空元素,如果这套使用自然排序其元素的比较。
    boolean
    contains(Object o)
    如果此集合包含指定的元素,则返回true 。
    Iterator<E>
    descendingIterator()
    返回迭代器中这套降序排序的元素。
    NavigableSet<E>
    descendingSet()
    返回逆序视图中包含的元素这一套。
    E
    first()
    返回第一个 (最低) 元素当前在这一套。
    E
    floor(E e)
    返回的最大元素在这一组小于或等于null如果没有这样的元素。
    SortedSet<E>
    headSet(E toElement)
    返回其元素是严格小于toElement这套的部分视图.
    NavigableSet<E>
    headSet(E toElement, boolean inclusive)
    返回一个视图的这部分设置的元素都小于 (或等于,如果inclusive是真的) toElement.
    E
    higher(E e)
    返回最小的元素在这套严格大于给定的元素,则null如果没有这样的元素。
    boolean
    isEmpty()
    如果此集不包含任何元素,则返回true 。
    Iterator<E>
    iterator()
    返回迭代器中这套以升序排序的元素。
    E
    last()
    在这套目前返回的最后一个 (最高) 的元素。
    E
    lower(E e)
    在这一套严格的小于给定的元素,则null返回的最大元素,如果没有这样的元素。
    E
    pollFirst()
    检索和删除第一个 (最低) 元素,或如果此集合为空,则返回null 。
    E
    pollLast()
    检索和删除的最后一个 (最高) 的元素,或如果此集合为空,则返回null 。
    boolean
    remove(Object o)
    从这一组中移除指定的元素,如果它存在。
    int
    size()
    在这套 (其基数) 中返回的元素的数目。
    NavigableSet<E>
    subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
    返回此集的部分视图的元素范围从fromElement到toElement.
    SortedSet<E>
    subSet(E fromElement, E toElement)
    返回视图的部分的这一套的元素范围从fromElement,具有包容性,到toElement,独家。
    SortedSet<E>
    tailSet(E fromElement)
    返回其元素是大于或等于fromElement这套的部分视图.
    NavigableSet<E>
    tailSet(E fromElement, boolean inclusive)
    返回其元素是大于 (或等于,如果inclusive是真的) 这套的部分视图fromElement.
  • 相关阅读:
    Unity周记: 2020.09.07-09.13
    Unity周记: 2020.08.31-09.06
    CF1060F Shrinking Tree
    洛谷P6783 [Ynoi2008] rrusq
    洛谷P5644 [PKUWC2018] 猎人杀
    洛谷P1587 [NOI2016] 循环之美
    洛谷P4466 [国家集训队] 和与积
    集合幂级数杂题
    Flink基础(49):FLINK SQL(25) 内置函数(七)表值函数
    Flink基础(48):FLINK SQL(24) 内置函数(六)条件函数
  • 原文地址:https://www.cnblogs.com/jdemarryme/p/9369060.html
Copyright © 2011-2022 走看看