我可以在TreeSet的构造函数中同时拥有ArrayList和Comparator吗?

时间:2019-01-13 19:11:16

标签: java comparator treeset

假设我在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());
    }
});

1 个答案:

答案 0 :(得分:1)

没有TreeSet构造器同时使用ComparatorCollection,但是您可以使用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才有意义。