我可以在 TreeSet 的构造函数中同时拥有 ArrayList 和 Comparator 吗?
Can i have both an ArrayList and a Comparator in the constructor of a TreeSet?
假设我有一个 class 宠物,它在 ArrayList 中具有属性 name(String) 和 age(int),我想在不使用 Collections Framework 的情况下对它们进行排序,所以我使用 TreeSet 来解析 ArrayList.My 问题是,有没有办法在 TreeSet 的构造函数(与 ArrayList 一起)中初始化一个新的比较器,或者我是否必须在 Pet Class 中实现一个新的 Comparator/Comparable?
已经通过在 Pet 中实现一个 Comparable 来尝试 Class 并且成功了,但我想知道是否有使用 TreeSet 构造函数的更短的方法。
ArrayList<Pet> myPets = new ArrayList<>();
// TreeSet to compare names
TreeSet<Pet> sortedPets = new TreeSet(myPets, new Comparator<Pet>() {
public int compare(Pet p1, Pet p2) {
return p1.getName().compareTo(p2.getName());
}
});
没有 TreeSet
构造函数同时采用 Comparator
和 Collection
,但您可以创建带有 Comparator
的 TreeSet
,然后用 addAll
:
填充它
TreeSet<Pet> sortedPets = new TreeSet(new Comparator<Pet>() {
public int compare(Pet p1, Pet p2) {
return p1.getName().compareTo(p2.getName());
}
});
sortedPets.addAll(myPets);
在 Pet
class 中实现 Comparable
仅当您考虑按名称对 Pet
进行排序是 [=18] 的自然排序时才有意义=]s.
假设我有一个 class 宠物,它在 ArrayList 中具有属性 name(String) 和 age(int),我想在不使用 Collections Framework 的情况下对它们进行排序,所以我使用 TreeSet 来解析 ArrayList.My 问题是,有没有办法在 TreeSet 的构造函数(与 ArrayList 一起)中初始化一个新的比较器,或者我是否必须在 Pet Class 中实现一个新的 Comparator/Comparable?
已经通过在 Pet 中实现一个 Comparable 来尝试 Class 并且成功了,但我想知道是否有使用 TreeSet 构造函数的更短的方法。
ArrayList<Pet> myPets = new ArrayList<>();
// TreeSet to compare names
TreeSet<Pet> sortedPets = new TreeSet(myPets, new Comparator<Pet>() {
public int compare(Pet p1, Pet p2) {
return p1.getName().compareTo(p2.getName());
}
});
没有 TreeSet
构造函数同时采用 Comparator
和 Collection
,但您可以创建带有 Comparator
的 TreeSet
,然后用 addAll
:
TreeSet<Pet> sortedPets = new TreeSet(new Comparator<Pet>() {
public int compare(Pet p1, Pet p2) {
return p1.getName().compareTo(p2.getName());
}
});
sortedPets.addAll(myPets);
在 Pet
class 中实现 Comparable
仅当您考虑按名称对 Pet
进行排序是 [=18] 的自然排序时才有意义=]s.