【发布时间】:2012-09-07 00:21:17
【问题描述】:
我有两个对象,分别是 Person 和 Employee 类。 两个类都有共同的属性年龄。 而且我已经将这两个类的几个对象添加到 Arraylist 中,现在我想要两个写一个 Comparator 并将其传递给 Collections 类的 sort 方法。 并希望根据年龄对列表进行排序。 我尝试这样做只是为了更清楚地了解 Java 中 Comparable 和 Comparator 的使用。
编辑: 我问这个问题的原因是我不清楚 Comparator 和 Comparable。 我在某处读到如果 Class 实现 Comparable 则它不能与其他类的对象进行比较(因为 Class cast 异常)。
现在,如果我在 Employee 和 Person 中创建关系,则无需实现 Comparator(除非我想根据这些类的名称或其他公共属性进行排序)。
我再次提出这个问题是为了更清楚地了解 Comparator 和 Comparable。
到目前为止,我能够理解的是,如果我想对多个参数进行排序,那么我应该实现 Comparator 并将其传递给 Collections.srot()。
或者如果我无法控制被排序的对象的类,那么我应该实现比较器的自定义排序。 (如果我错了或遗漏了什么,请纠正我)
编辑
我想现在我理解了 Comparable 和 Comparator 的用法。 为了确保我得到正确的概念,以下是我的理解: 如果我想比较两个不同类的对象(并且没有关系),那么我应该使用原始比较器并覆盖比较方法。 有人会实施 Comparator 而不是 Comparable 的另一个原因是 具有排序的灵活性。 而我从自然排序中所理解的,是 Class 在 CompareTo 方法中实现的逻辑。
希望我对所有这些观点都是正确的。
【问题讨论】:
-
你为什么不使用接口(例如 Ageable)让 Person 和 Employee 都实现它并比较两个 ageable 对象?
-
@om-nom-nom 这听起来像是对这个问题的一个很好的回答。
-
如果你不使用泛型,当然可以。
-
我假设 Employee 扩展了 Person,不是吗?
-
是的,使用反射并将性能扔到窗口*讽刺*
标签: java comparator