Collections.sort() 可以将 treeSet 作为第一个参数吗?如果不是为什么?
Can Collections.sort() take treeSet as first argument? If not why?
我的 'Person' 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()
和 comparator
只能用于 List
而不能用于 Set
。
我说的对吗?如果不是我哪里错了?如果是,为什么我是对的?
Collections.sort
的第一个参数是 List<T>
类型。所以你只能传递 List
个对象给它,而不是 Set
个对象,或者其他任何东西。
这是明智的。原因是 Set
对象有两种类型。
- 有一些,就其性质而言,总是未排序的,例如
HashSet
。对这些进行排序没有意义。
- 有一些,就其性质而言,总是以相同的方式排序,例如
TreeSet
。对这些进行排序没有意义,因为它们已经排序了。
我想也许你想要的是把你的 TreeSet
和使用不同的 Comparator
排序。为此,您必须使用新的 Comparator
创建一个新的 TreeSet
,并使用 addAll
.
复制旧集合中的条目
我的 'Person' 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()
和 comparator
只能用于 List
而不能用于 Set
。
我说的对吗?如果不是我哪里错了?如果是,为什么我是对的?
Collections.sort
的第一个参数是 List<T>
类型。所以你只能传递 List
个对象给它,而不是 Set
个对象,或者其他任何东西。
这是明智的。原因是 Set
对象有两种类型。
- 有一些,就其性质而言,总是未排序的,例如
HashSet
。对这些进行排序没有意义。 - 有一些,就其性质而言,总是以相同的方式排序,例如
TreeSet
。对这些进行排序没有意义,因为它们已经排序了。
我想也许你想要的是把你的 TreeSet
和使用不同的 Comparator
排序。为此,您必须使用新的 Comparator
创建一个新的 TreeSet
,并使用 addAll
.