我们知道,集合Set可以存放一系列的对象,比如int,class,而且是无序的,是不可重复的。今天我们来探讨的是:Set可不可以排序,怎样自定义排序规则
首先盗一张图来说明Set的继承关系:

下面我们来实现SortedSet的排序:
public class test { public static void main(String[] args) { TreeSet
set=
new TreeSet
();
set.add(
"B");
set.add(
"D");
set.add(
"A");
set.add(
"E");
set.add(
"C"); System.
out.println(
set); } }
//这时TreeSet的一个构造方法 //comparator:这个就是自定义的排序规则 public TreeSet(Comparator
super E> comparator) { this(new TreeMap<>(comparator)); }
下面我们来测试一下;
public class test { public static void main(String[] args) { //new 一个自定义Comparator TreeSet
set=
new TreeSet
(
new MyComparator());
set.add(
"B");
set.add(
"D");
set.add(
"A");
set.add(
"E");
set.add(
"C"); System.
out.println(
set); } } class MyComparator implements Comparator{ @Override
public
int
compare(Object o1, Object o2) { String s1=(String) o1; String s2=(String) o2;
//反序
return s2.compareTo(s1); } }
结果和显然:[E, D, C, B, A]
这都是很简单的,如果我们用一个自定义class呢,比如一个Person类,要求按照age排序,我们来看一下如何实现:
public class test { public static void main(String[] args) { //自定义排序规则 TreeSet
set=
new TreeSet
(
new MyComparator());
set.add(
new Person(
"A",
20));
set.add(
new Person(
"D",
10));
set.add(
new Person(
"E",
40));
set.add(
new Person(
"C",
50));
set.add(
new Person(
"B",
30)); System.
out.println(
set); } } class Person{ String name;
int age;
public
Person(String name,
int age){
this.name=name;
this.age=age; } @Override
//重写toString方法,制定输出格式:
public String
toString() {
return
"name:"+name+
",age="+age; } } class MyComparator implements Comparator{ @Override
public
int
compare(Object o1, Object o2) { Person p1=(Person) o1; Person p2=(Person) o2;
//自定义比较规则
return (
int) (p1.age-p2.age); } }
达到了我们想要的结果。
这样,我们就搞定了Set的排序。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177843.html原文链接:https://javaforall.net
