使用比较器对数组进行排序时出现 ClassCastException

ClassCastException while sorting an array using Comparator

我喜欢这样class比较Y坐标(降序) 我已经预定义了 Point class .

在 main class 中,我正在发送比较 Y 数组,它保持点(类型 =Point)Arrays.sort(array); 它给了我 ClassCastExeption

我该如何解决这个问题。


public class CompareY  implements Comparator<Point> {

public CompareY(){
}

@Override
public int compare(Point a1, Point a2) {

    if (a1.y > a2.y)
        return -1;
    else if (a1.y < a2.y)
        return 1;
    else {
        if (a1.x < a2.x)
            return 1;
        else if (a1.x > a2.x)
            return -1;
        else
            return 0;
    }

}

Arrays.sort(Object[] a) 方法需要一个实现 Comparable 的类型。如果你正在创建一个 CompareY 对象数组,你应该注意 CompareY 没有实现 Comparabe 因此,你在运行时得到一个 ClassCastException 因为 CompareY无法转换为 Comparable。同样,如果您正在创建 Point 个对象的 array,您仍然会得到一个 ClassCastException,因为 Points 没有实现 Comparable

解决问题:

  1. 创建 arrayPoint 个对象。
  2. 使用采用 ComparatorArrays.sort 方法。

示例:

Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());

或者,您可以让 Point class 实现 Comparable 并定义 Points 的自然顺序。然后就可以直接使用Array.sort(Object[] a)方法了。