我的“人”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
