首页 > 基础教程 > 集合框架 > TreeSet类

Java TreeSet类

TreeSet是SortedSet接口的实现,元素不论以什么元素插入,在遍历的时候,都会以天然顺序遍历。

TreeSet基于TreeMap的NavigableSet实现,使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

构造方法

TreeSet()

构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。

TreeSet(Collection extends E> c)

构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。

TreeSet(Comparator super E> comparator)

构造一个新的空 TreeSet,它根据指定比较器进行排序。

TreeSet(SortedSet s)

构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。

TreeSet是带排序的,所以想要为TreeSet增加自定义类型,必须指定排序规则

方法

E ceiling(E e)

返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null。

Comparator super E> comparator()

返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null。

Iterator descendingIterator()

返回在此 set 元素上按降序进行迭代的迭代器。

NavigableSet descendingSet()

返回此 set 中所包含元素的逆序视图。

E first()

返回此 set 中当前第一个(最低)元素。

E floor(E e)

返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。

SortedSet headSet(E toElement)

返回此 set 的部分视图,其元素严格小于 toElement。

NavigableSet headSet(E toElement, boolean inclusive)

返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement。

E higher(E e)

返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null。

Iterator iterator()

返回在此 set 中的元素上按升序进行迭代的迭代器。

E last()

返回此 set 中当前最后一个(最高)元素。

E lower(E e)

返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null。

E pollFirst()

获取并移除第一个(最低)元素;如果此 set 为空,则返回 null。

E pollLast()

获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null。

NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)

返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。

SortedSet subSet(E fromElement, E toElement)

返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。

SortedSet tailSet(E fromElement)

返回此 set 的部分视图,其元素大于等于 fromElement。

NavigableSet tailSet(E fromElement, boolean inclusive)

返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。

Comparator排序规则

代码如下:

public class Test {

public static void main(String[] args) {

TreeSet set = new TreeSet(new PersonComparator());

set.add(new Person("lwc", 80));

set.add(new Person("nxj", 70));

set.add(new Person("lp", 60));

set.add(new Person("fy", 75));

Iterator ite = set.iterator();

while (ite.hasNext()) {

Person p = (Person)ite.next();

System.out.println(p.name);

}

}

}

class Person {

String name;

int score;

public Person(String name, int score) {

this.name = name;

this.score = score;

}

}

class PersonComparator implements Comparator {

public int compare(Object o1, Object o2) {

Person p1 = (Person) o1;

Person p2 = (Person) o2;

return p1.score - p2.score;

}

}

例子

public static void main(String[] args) {

//      test1();

test2();

}

/**

* 自然排序

*/

private static void test1() {

TreeSet treeSet=new TreeSet();

treeSet.add("a");

treeSet.add("d");

treeSet.add("b");

treeSet.add("e");

treeSet.add("c");

for (String string : treeSet) {

System.out.println(string);

}

}

/**

*

* TreeSet添加自定义对象时满足其一 ①构造时传入比较器 ②实现Comparable接口并重写compare方法,否则抛出异常

*  java.lang.ClassCastException:

*  com.yu.bean.Info cannot be cast to java.lang.Comparable

*/

private static void test2() {

TreeSet infosSet =new TreeSet(new Comparator() { // 传入比较器,保证顺序

@Override

public int compare(Info o1, Info o2) {

int num=o1.getId()-o2.getId();

num = num==0?o1.hashCode()-o2.hashCode():num;

return num;

}

}) ;

infosSet.add(new Info(0, "qqq"));

infosSet.add(new Info(1, "wew"));

infosSet.add(new Info(3, "ete"));

infosSet.add(new Info(2, "bjk"));

infosSet.add(new Info(1, "wew")); // 重复元素,compare方法返回0,不会被插入到TreeSet

for (Info info : infosSet) {

System.out.println(info);

}

//      output:

//      Info [id=0, adress=qqq]

//      Info [id=1, adress=wew]

//      Info [id=2, adress=bjk]

//      Info [id=3, adress=ete]

//  可以看出,Comparator保证了元素的有序性,重复元素将不会被添加到TreeSet

}

总结

1. 基于TreeMap实现的SortedSet

2. 排序后按升序排列元素

3. 非线程安全

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

java tree 类_Java TreeSet类相关推荐

  1. java filereader类_Java FileReader类

    FileReader类从InputStreamReader类继承而来.该类按字符读取流中数据.可以通过以下几种构造方法创建需要的对象. 在给定从中读取数据的 File 的情况下创建一个新 FileRe ...

  2. java复用类_java复用类

    1. toString() 每一个非基本类型都有一个toString()方法:当编译器需要从对象获取一个string时,该对象的toString()方法就会被调用. 示例: class WaterSo ...

  3. java高级类_Java高级类特性(一)

    权限类内同包不同包子类不同包非子类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 四.super关键字的使用 pac ...

  4. java 根据类名示例化类_Java即时类| from()方法与示例

    java 根据类名示例化类 即时类from()方法 (Instant Class from() method) from() method is available in java.time pack ...

  5. java 根据类名示例化类_Java即时类| EpochSecond()方法的示例

    java 根据类名示例化类 EpochSecond()方法的即时类 (Instant Class ofEpochSecond() method) Syntax: 句法: public static I ...

  6. java 大数类_Java大数类介绍

    java能处理大数的类有两个高精度大整数BigInteger和高精度浮点数BigDecimal,这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.B ...

  7. java 根据类名示例化类_Java即时类| plusMillis()方法与示例

    java 根据类名示例化类 即时类plusMillis()方法 (Instant Class plusMillis() method) plusMillis() method is available ...

  8. java 根据类名示例化类_Java LocalDateTime类| atOffset()方法与示例

    java 根据类名示例化类 LocalDateTime类atOffset()方法 (LocalDateTime Class atOffset() method) atOffset() method i ...

  9. java 根据类名示例化类_Java MathContext类| 带示例的getRoundingMode()方法

    java 根据类名示例化类 MathContext类的getRoundingMode()方法 (MathContext Class getRoundingMode() method) getRound ...

最新文章

  1. mysql max_allowed_packet 参数 限制接受的数据包大小
  2. dhrystone测试结果_RTThread软件包可以对MCU进行性能测试,跑一个试试!
  3. Fiori应用的书签模式 - bookmark
  4. redhat5中架设DHCP服务器与DHCP中继
  5. argumentoutofrangeexception:长度不能小于0_数组长度属性背后的魔力有哪些?
  6. static and const
  7. 苹果笔记本能玩英雄联盟吗_《英雄联盟手游》日服安卓和ios数据互通说明 安卓和ios可以一起玩吗_英雄联盟手游...
  8. 常规RPC通讯过程【转载】
  9. iOS底层探索之多线程(五)—GCD不同队列源码分析
  10. 完美国际服务器修改器,《完美世界国际2》155虚拟一键端 el编辑器 装备在线编辑器 GM管理后台 同步最新官方客户端Build 2567...
  11. 使用torch.nn.BatchNorm1d出现Tensor for argument #2 ‘weight‘ is on CPU, but expected it to on GPU错误
  12. iOS-AVCaptureStillImageOutput快门声问题
  13. 傲腾readyboost_使用SD卡和ReadyBoost提升上网本速度
  14. Matlab/Simulink Embedded Coder一个非常迷幻的问题
  15. 程序员都需要会的JVM调优总结 -Xms -Xmx -Xmn -Xss,附idea配置实战(程序员必学)
  16. php phalapi,[6.3]-SDK包(PHP版) | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
  17. 用计算机探索商的变化规律教案,用计算器探索规律教学设计与反思(精选5篇)...
  18. 解析Linux中的VFS文件系统
  19. A2. Gsensor调试
  20. python, echarts 实现世界地图地域流向地图

热门文章

  1. 概率密度变换公式 雅可比矩阵_的联合概率密度函数f(x,y).ppt
  2. python3 for循环怎么用_python遍历循环 python三个for循环怎么使用
  3. html5截取视频片段,【转】H5 VIDEO标签列表渲染用CANVAS截取视频画面做封面
  4. OpenGL学习之路6----平移,旋转和缩放变换
  5. 年末送好礼!100张鼠标垫拿来吧你!
  6. Closest Cow Wins S 最近的奶牛获胜
  7. vue模糊查询 计算属性实现版本
  8. 软件测试工程师前景怎样?这3大好处没人能拒绝!
  9. 青岛高新职业学校计算机专业,青岛高新职业学校
  10. 2016春运火车票预售时间表出炉