我有一个班级,一个人。它有年龄,名字,身高等 我正在创建一个名为PersonCollection的类,它是一个列表的包装器(一个ArrayList)。
我希望能够使用PersonCollection类比较Person对象,这意味着,我不想让Person类实现Comparable接口,我希望PersonCollection实现Comparator接口。 / p>
我在这方面遇到了麻烦。我已经实现了比较方法,但是当我比较人物对象时它仍然无法工作。
例如这段代码给了我一个错误(人是一个ArrayList
public void insert (Person p){
for(int i = 0; i < people.size(); i++){
if (people.get(i) > p){
//Do something
}
}
}
我知道如何使用Comparator进行排序,这是不同的。 我完全了解其他可能的更好的解决方案(任何优先级队列类或某种排序集类)
我希望为特定原因对ArrayList这样做,我恳请您将解决方案建立在此基础而不是建议其他数据结构。
答案 0 :(得分:1)
您可以编写自定义j1
并使用Comparator
方法。
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#compare-T-T-
您的代码看起来像
compare(a, b)
答案 1 :(得分:1)
根据你的描述,你有一个像这样的Wrapper课程?
public class People implements List<Person>, Comparator<Person>{
/* methods */
}
所以如果你想真正使用比较器接口,那么你必须这样做:
public void insert (Person p){
for(int i = 0; i < people.size(); i++){
if (people.compare(people.get(i),p)){ // because people implements Comparator
//Do something
}
}
}
哪个应该(不太确定)工作。
但我强烈建议不要使用它并考虑更好的东西,因为类不应该是比较器和列表(因为两个接口都应该用于完全不同的原因)。
更好的方法是让Person
实现Comparable
,然后根据
答案 2 :(得分:1)
下面是一段代码,您可以看到自定义比较器正在对象对象的年龄属性进行年龄比较。
{{1}}