【问题标题】:Can i have both an ArrayList and a Comparator in the constructor of a TreeSet?我可以在 TreeSet 的构造函数中同时拥有 ArrayList 和 Comparator 吗?
【发布时间】:2019-01-13 19:11:16
【问题描述】:

假设我在 ArrayList 中有一个具有属性 name(String) 和 age(int) 的 Pet 类,我想在不使用 Collections Framework 的情况下对它们进行排序,所以我使用 TreeSet 来解析 ArrayList。我的问题是,是否存在一种在 TreeSet 的构造函数中初始化新比较器的方法(与 ArrayList 一起),还是我必须在宠物类中实现一个新的比较器/可比较器?

已经通过在 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());
    }
});

【问题讨论】:

    标签: java comparator treeset


    【解决方案1】:

    没有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);
    

    仅当您认为按名称对Pets 进行排序是Pets 的自然排序时,在Pet 类中实现Comparable 才有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多