我可以在 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 构造函数同时采用 ComparatorCollection,但您可以创建带有 ComparatorTreeSet,然后用 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.