我的“人”class
如下 -
public class Person implements Comparable<Person> {
private int marks;
private String name;
Person(int marks, String name) {
this.marks = marks;
this.name = name;
}
public int getMarks() {
return marks;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person: Marks = " marks ", Name = " name;
}
@Override
public int compareTo(Person person) {
return marks > person.marks ? 1 : -1;
}
}
現在在main method
我創建了另一個comparator
相反的sorting
-
Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
int marks1 = p1.getMarks();
int marks2 = p2.getMarks();
return marks1 > marks2 ? -1 : 1;
}
};
現在,我創建了一個TreeSet
-
TreeSet<Person> treeSet1 = new TreeSet<>(List.of(
new Person(67, "Himani"),
new Person(73, "Hasani"),
new Person(21, "Rohini")
));
現在,我嘗試將 treeSet 作為引數傳遞給Collections.sort()
-
Collections.sort(treeSet1, comparator);
在這里,我收到以下錯誤 -
Required type Provided
list:List<T> TreeSet<Person>
c:Comparator<? super T> Comparator<Person>
據我可以從錯誤中推斷出來 - Collections.sort()
withcomparator
只能用于 onList
和 not Set
。
我對么?如果不是我哪里錯了?如果是,為什么我是正確的?
uj5u.com熱心網友回復:
的第一個引數Collections.sort
是型別List<T>
。因此,您只能將List
物件傳遞給它,而不能將Set
物件或其他任何東西傳遞給它。
這是明智的。原因是Set
物件有兩種型別。
- 有些就其性質而言總是未分類的,例如
HashSet
. 對這些進行排序沒有意義。 - 有些從本質上講總是以相同的方式排序,例如
TreeSet
. 對這些進行排序沒有意義,因為它們已經排序。
我想也許你想要的是把你的TreeSet
并用不同的Comparator
. 為此,您必須使用 new 創建一個 new TreeSet
,Comparator
并使用 復制舊集合中的條目addAll
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479958.html