博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TreeSet
阅读量:6279 次
发布时间:2019-06-22

本文共 3461 字,大约阅读时间需要 11 分钟。

简介:

  TreeSet是一个有序集合,作用是提供有序的Set集合,也就是没有重复元素,如果add重复元素会抛出ClassCastException异常,该类继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。可以看做是一种基于TreeMap的NavigableSet实现。因为TreeSet继承了AbstractSet抽象类,所以他是一个set集合,因此支持add,remobe,get等方法,可以被实例化,且具有set的属性和方法。TreeSet是基于TreeMap实现的,TreeSet中的元素根据TreeSet的构造方法支持两种方式排序:自然排序,根据创建TreeSet时提供的Comparator进行排序。

  自然排序(Comparable)

  • TreeSet类的add()方法中会把存入的对象提升为Comparable类型
  • 调用对象的compareTo()方法和集合中的对象比较
  • 根据compareTo()方法返回的结果进行存储

  比较器排序(Comparator)

  • 创建TreeSet的时候可以制定 一个Comparator
  • 如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
  • add()方法内部会自动调用Comparator接口中compare()方法排序
  • 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数

  TreeSet的性能比HashSet差,但是问我们在需要排序的时候我们可以使用TreeSet,它的自然排序为升序。

继承关系:

java.lang.Object   ↳     java.util.AbstractCollection
↳ java.util.AbstractSet
↳ java.util.TreeSet
public class TreeSet
extends AbstractSet
implements NavigableSet
, Cloneable, java.io.Serializable{}

  TreeSet继承了AbstractSet,实现了NabigableSet接口,TreeSet本质上是一个有序的,并且没有重复元素的集合,它是通过TreeMap实现的,TreeSet中含有一个NavigableMap类型的成员变量m,实际上是TreeMap的实例。

遍历方式:

//升序遍历for(Iterator iter = set.iterator(); iter.hasNext(); ) {     iter.next();}  //倒序遍历for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) {     iter.next();}//for-each遍历String[] arr = (String[])set.toArray(new String[0]);for (String str:arr)    System.out.printf("for each : %s\n", str);

 

序号 构造函数的说明
1 TreeSet ()

此构造函数构造空树集,将在根据其元素的自然顺序按升序排序。

2 TreeSet (集合 c)

此构造函数生成树的集合,它包含的元素的集合 c。

3 TreeSet (比较器 comp)

此构造函数构造一个空树集,将根据给定的比较器进行排序。

4 TreeSet (SortedSet ss)

此构造函数生成包含给定 SortedSet 的元素 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)
返回此集的部分视图的元素范围从fromElementtoElement.
SortedSet<E> subSet(E fromElement, E toElement)
返回视图的部分的这一套的元素范围从
fromElement,具有包容性,到
toElement,独家。
SortedSet<E> tailSet(E fromElement)
返回其元素是大于或等于fromElement这套的部分视图.
NavigableSet<E> tailSet(E fromElement, boolean inclusive)
返回其元素是大于 (或等于,如果inclusive是真的) 这套的部分视图f

根据属性去重对象:

ArrayList
collect =entitys.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(comparing(MyEntity::getId))), ArrayList::new));

 

转载于:https://www.cnblogs.com/yangfei-beijing/p/9412490.html

你可能感兴趣的文章
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>
MySQL 索引 BST树、B树、B+树、B*树
查看>>
微信支付
查看>>
CodeBlocks中的OpenGL
查看>>
短址(short URL)
查看>>
C++零基础教程(一)——何谓编程
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>