使用Comparator对数组进行排序时出现ClassCastException

时间:2015-05-09 12:10:23

标签: java comparator

我喜欢这个班来比较Y Cordinates(降序) 我有预定义的Point类。

在主类中,我发送的是比较Y数组,它保留了点数(类型=点数)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;
    }

}

1 个答案:

答案 0 :(得分:3)

Arrays.sort(Object[] a)方法需要一种实现Comparable的类型。如果要创建CompareY个对象数组,则应注意CompareY未实现Comparabe,因此,自ClassCastException以来,您在运行时获得CompareY无法转换为Comparable。同样,如果您要创建array PointClassCastException个对象,由于Points未实现Comparable

,您仍会获得array

解决问题:

  1. 创建PointComparator个对象。
  2. 使用Point[] points = new Point[]{new Point(..),new Point(...)}; Arrays.sort(points,new CompareY()); 的{​​{3}}方法。
  3. 示例:

    Point

    或者,您可以拥有Comparable类工具Points并定义Array.sort(Object[] a)的自然顺序。然后,您可以直接使用.meta方法。