Rag*_*ghu 4 java sorting collections arraylist hashcode
我有一个对象的ArrayList(POJO),它有一个Id和另一个字段.我已经在Id字段的POJO中实现了equals()/ hashcode()覆盖.当我使用Object类的equals()方法比较两个对象时,它完全正常.但是,当我将这些对象添加到arraylist并实现
Collections.sort(arrListOfObjects);
Run Code Online (Sandbox Code Playgroud)
它给了我一个classCastexception.我抬起头,发现我需要实现一个比较器.这个比较器也做了等于/ hashcode覆盖的东西.如果是这样那么为什么上面的代码不起作用?(我知道没有比较器,但我的问题是,是不是可以实现基于对象的哈希码的排序?)
正如消息所说,您的对象需要实现Comparable接口才能进行排序.或者,您可以为sort()
方法提供比较器.例如,假设您的对象是字符串,并且您希望基于哈希码进行排序,则可以执行以下操作:
public static void main(String[] args) {
List<String> list = Arrays.asList("string", "sdkj");
for (String s : list) {
System.out.println(s + "=" + s.hashCode());
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.hashCode() - o2.hashCode();
}
});
System.out.println("After Sorting");
for (String s : list) {
System.out.println(s + "=" + s.hashCode());
}
}
Run Code Online (Sandbox Code Playgroud)