使用比较器对数组进行排序时出现 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
解决问题:
- 创建
array
个 Point
个对象。
- 使用采用
Comparator
的 Arrays.sort 方法。
示例:
Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());
或者,您可以让 Point
class 实现 Comparable
并定义 Points
的自然顺序。然后就可以直接使用Array.sort(Object[] a)
方法了。
我喜欢这样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
解决问题:
- 创建
array
个Point
个对象。 - 使用采用
Comparator
的 Arrays.sort 方法。
示例:
Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());
或者,您可以让 Point
class 实现 Comparable
并定义 Points
的自然顺序。然后就可以直接使用Array.sort(Object[] a)
方法了。