我有两个Person和Employee类对象。 这两个类都有共同的属性年龄。 我已经将两个这两个类的对象添加到Arraylist中,现在我想要两个写一个Comparator并将它传递给Collections类的sort方法。 并希望列表根据年龄进行排序。 我这样做只是为了更清楚地了解在Java中使用Comparable和Comparator。
编辑: 原因为什么我问这个问题是我不清楚比较器和可比较的。 我在某处读到如果Class实现了Comparable,那么它就无法与其他类的对象进行比较(因为类转换异常)。
现在如果我在Employee和Person中创建关系,那么就不需要实现Comparator(除非我想根据名称或这些类的其他公共属性进行排序)。
再一次,我已经问过这个问题,以便更清楚地了解Comparator和Comparable。
到目前为止,我能够理解的是,如果我想对多个参数进行排序,那么我应该实现Comparator并将其传递给Collections.srot()。
或者如果我无法控制正在排序的对象类,那么自定义排序我应该实现Comparator。 (纠正我,如果我错了或者我错过了什么)
修改
我想现在我理解Comparable和Comparator的使用。 为了确保我得到了正确的概念,这就是我所理解的: 如果我想比较不同类的两个对象(并且没有关系),那么我应该使用原始比较器并覆盖比较方法。 有人实现Comparator而不是Comparable的另一个原因是 具有分类灵活性。 我从自然排序中理解的是在CompareTo方法中由Class实现的逻辑。
希望我对所有这些观点都是正确的。
答案 0 :(得分:4)
您可以定义名为Ageable的接口,而Employee和Person可以实现此接口。您还可以定义一个抽象类(而Employee和Person将从抽象类继承)具有相同的效果。请注意,出于这个原因你也可以使用普通类,你可以做任何你需要的事情。
此外,如果没有理由说员工不是一个人(例如机器人在办公室工作),那么员工可以从人员继承。
答案 1 :(得分:3)
我会让员工成为Person的子类。 (假设您的所有员工都是人员)然后您可以创建Comparator<Person>
答案 2 :(得分:2)
您应该创建一个界面AgeProvider
:
public interface AgeProvider {
int getAge();
}
Person
和Employee
都应该实现AgeProvider
。现在,您可以实现比较2 AgeProvider
。