TreeSet,Comparator

ThreeSet能够对集合中的对象排序,当TreeSet想集合中加入一个对象时,会把它插入到有序的对象序列中。

ThreeSet自带了一个排序方法,这个方法规定了一般数据的排序规则,如果用户想要规定自己的排序方法,那么久要重写Comparator方法。

下面是一个ThreeSet自带方法排序的例子:

输出的结果为:[A,B,C,D,E,F]

可以看出ThreeSet内部对字符的排序。

那么现在我们定义一个Preson类,按照person类的score属性的升序排序,显然,ThreeSet本身并不知道用户的排序规则,这就需要我们自己定义一个比较器来告诉ThreeSet该以score为标准来排序。

那么如何定义一个比较器呢,我们需要实现comparator接口,并且重写它的compare方法,在该方法中定义自己的比较规则,最后把实现接口的这个比较器传给ThreeSet。

下面我们在Person类里面定义一个比较器:

PersonComparator实现了Comparator这个接口,重写了compare()方法,其中p1.score - p2.socore代表升序排序,反过来就是降序排序。

最后我们把这个自定义的比较器传给ThreeSet,然后用迭代器输出排序后的集合:

最后输出的结果为:

10

20

30

40

时间: 2024-08-08 06:02:00

TreeSet,Comparator的相关文章

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列

/* * 使用TreeSet和Comparator,写TreeSetTest2 *要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列, *排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 */ import java.util.Comparator; import java.util.TreeSet; public class TreeTest2 { public static void main(String[] args) { // TODO Aut

TreeSet和Comparator 对TreeSet排序

使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList"."TreeMap"."HashMap"."TreeSet"."LinkedList"进行升序和倒序排列,并使用匿名内部类和静态内部类分别实现. 方法一: 静态内部类 import java.util.*; public class Tr

java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例

java 数组比较,元素的比较,自定义Comparator的实现,排序,查找示例 package org.rui.array.compar; import java.util.Arrays; import java.util.Random; import org.rui.generics.anonymity.Generator; /** * 程序设计的基本目标是"将保持不变的事物与会发生改变的事物相分离" * 而这是,不变的是通用的排序算法,变化的是各种对象相互比较的方式, * 因此,

在 JDK 7 版本以上, Comparator 要满足自反性,传递性,对称性

在 JDK 7 版本以上, Comparator 要满足自反性,传递性,对称性,不然 Arrays . sort ,Collections . sort 会报 IllegalArgumentException 异常.说明:1 ) 自反性: x , y 的比较结果和 y , x 的比较结果相反.2 ) 传递性: x > y , y > z ,则 x > z .3 ) 对称性: x = y ,则 x , z 比较结果和 y , z 比较结果相同.反例:下例中没有处理相等的情况,实际使用中可能

有时候错误很奇怪啊,Comparator问题

有时候错误很奇怪啊,Comparator问题,在我的电脑上排序好用,但是在别的电脑上排序不好用, 真奇怪a

用TreeSet和Comparator给list集合元素去重

今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.TreeSet去重也是有条件的,它依靠放入其中的元素的排序规则,所以放入其中的元素要有一个自定义的排序规则(此处表述不是很清楚,欢迎指正) 下面开始看好戏: 原本List<Person> persons 里面有3个元素: List<Person> persons = new ArrayLis

【Java学习笔记】&lt;集合框架&gt;TreeSet,Comparable,Comparator

1 public class Person implements Comparable{ 2 private String name; 3 private int age; 4 5 public Person(){ 6 super(); 7 } 8 public Person(String name, int age) 9 { 10 super(); 11 this.name = name; 12 this.age = age; 13 } 14 15 16 @Override 17 public

黑马程序员——17,集合,TreeSet,二叉树,泛型

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- /* TreeSet:可以自动对容器内部元素排序 */ import java.util.*; //Collection接口的体系放在Java.util包里面 class Jihe13 { publicstatic void main(St

Java学习总结(六)——(Map集合,Comparator接口,异常等)

一.Comparator接口 *Comparator接口的使用 (1)使用Comparable接口定义排序顺序有局限性:实现此接口的类只能按compareTo()定义的这一种方式排序. (2)如果同一类对象要有多种排序方式,应该为该类定义不同的比较器(实现Comparator接口的类)TreeSet有一个构造方法允许给定比较器,它就会根据给定的比较器对元素进行排序. (3)Comparator接口中的比较方法 示例:public int compare(Object o1, Object o2)