假设我在ArrayList中有一个具有名称(String)和age(int)属性的Pet类,并且我想在不使用Collections Framework的情况下对它们进行排序,所以我使用TreeSet来解析ArrayList。我的问题是一种在TreeSet的构造函数内(与ArrayList一起)初始化新的Comparator的方法,还是必须在Pet类中实现新的Comparator / Comparable?
已经通过在Pet类中实现Comparable进行了尝试,并且可以工作,但是我想知道是否使用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());
}
});
答案 0 :(得分:1)
没有TreeSet
构造器同时使用Comparator
和Collection
,但是您可以使用TreeSet
创建一个Comparator
然后填充它与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);
只有在您将Comparable
的名称顺序视为Pet
的自然顺序时,才在Pet
类中实现Pet
才有意义。