使用Hashcode对对象的ArrayList进行排序

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覆盖的东西.如果是这样那么为什么上面的代码不起作用?(我知道没有比较器,但我的问题是,是不是可以实现基于对象的哈希码的排序?)

ass*_*ias 6

正如消息所说,您的对象需要实现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)