当前位置: 首页 > 知识库问答 >
问题:

我可以在树集的构造函数中同时有一个ArrayList和一个比较器吗?

赫连明诚
2023-03-14

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

我已经通过在Pet类中实现一个可比较的方法尝试过了,并且成功了,但是我想知道是否有更短的方法使用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个答案

浦出野
2023-03-14

没有同时采用比较器集合树集构造函数,但您可以使用比较器创建树集,然后使用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类中实现comparable只有当您认为pet按名称排序是pet的自然排序时才有意义。

 类似资料:
  • 问题内容: 这是一段代码,作为示例,其余的只是方法(迷宫类的底部)。所以当实例化时,使用 和 这将打印出网格阵列。这是合法的吗?我认为所有类都需要构造函数,它如何打印出二维网格数组? 迷宫课: 问题答案: 不需要 显式 定义构造函数;但是,所有类都必须具有构造函数,如果不提供任何默认构造函数,则将生成默认的空构造函数: 请参见默认构造函数。

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

  • 问题内容: 在Java中,我们可以在一个类中创建多少个构造函数。 问题答案: 严格来说,JVM类文件格式将一个类的方法(包括所有构造函数)限制为少于65536。而且,根据汤姆·哈顿(Tom Hawtin)的说法,有效限制为65527。每个方法签名在常量池中占用一个插槽。由于65535池条目中的某些条目(不可避免地)被其他事物消耗,因此格式良好的类文件不可能使用所有可能的方法/构造函数ID。 参考-

  • 在Java中,我们可以在一个类中创建多少构造函数。

  • Spring文档说: 每个类只能标记一个带注释的构造函数,但是可以注释多个非必需的构造函数。在这种情况下,每个都被认为是候选的,Spring使用最贪婪的构造函数,其依赖关系可以得到满足——也就是说,具有最多参数的构造函数。构造函数解析算法与具有重载构造函数的非注释类相同,只是将候选对象缩小为注释构造函数。 我测试了它,当我有另一个由 错误: 组织。springframework。豆。工厂BeanC

  • 参加以下课程: 由于Foo(std::stringbar_, intbaz_=7);是我唯一的构造函数,编译器不应该为我实现默认构造函数,对吗?我认为我可以构造这个类的唯一两种方法是: 然而,为什么这是可能的? 当唯一的公共构造函数要求其第一个参数具有值时,我不理解如何默认构造类。将默认构造函数设为私有或尝试C 11删除它,没有什么区别。这是怎么发生的 http://ideone.com/CL7I