如下所示:https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html
TreeSet类中有两个构造函数:
TreeSet(Collection<? extends E> c)
TreeSet(Comparator<? super E> comparator)我不确定上面2中的哪个构造函数与下面的t2 TreeSet匹配,以及是否使用了传递的对象?
cat Sorted.java
import java.util.*;
public class Sorted implements Comparable<Sorted>, Comparator<Sorted> {
private int num;
private String text;
Sorted(int n, String t) {
this.num = n;
this.text = t;
}
public String toString() { return "" + num; }
public int compareTo(Sorted s) { return text.compareTo(s.text); }
public int compare(Sorted s1, Sorted s2) {
return s1.num-s2.num;
}
public static void main(String[] args) {
Sorted s1 = new Sorted(88, "a");
Sorted s2 = new Sorted(55, "b");
TreeSet<Sorted> t1 = new TreeSet<>();
t1.add(s1); t1.add(s2);
TreeSet<Sorted> t2 = new TreeSet<>(new Sorted(1,"c"));
t2.add(s1); t2.add(s2);
System.out.println(t1 + " " + t2);
}}
输出:
[root@localhost temp]# java Sorted
[88, 55] [55, 88]
[root@localhost temp]#谢谢。
发布于 2019-02-06 22:10:34
您正在使用此构造函数:
TreeSet(Comparator<? super E> comparator)因为在这里:
new TreeSet<>(new Sorted(1, "c"));您正在传递一个Sorted对象,而Sorted不是一个Collection,而是一个Comparator (顺便说一下,它也是一个Comparable):
public class Sorted implements Comparable<Sorted>, Comparator<Sorted>当然,传递的对象由TreeSet在内部使用来执行比较。
https://stackoverflow.com/questions/54555543
复制相似问题