我需要知道两个相等长度的双精度数组是否具有相同顺序的元素。我这样做,它似乎工作,但我认为必须有一个更有效的方式。
class Box {
double a, b;
}
boolean orderIsEqual(double[] a, double[] b) {
Box[] xa = new Box[a.length]; //always same length
Box[] xb = new Box[a.length]; //always same length
for (int i = 0; i < a.length; i++) {
Box box = new Box();
box.a = a[i];
box.b = b[i];
xa[i] = box;
xb[i] = box;
}
Arrays.sort(xa, new Comparator<Box>() {
@Override
public int compare(Box o1, Box o2) {
if (o1.a > o2.a) return 1;
if (o1.a < o2.a) return -1;
return 0;
}
});
Arrays.sort(xb, new Comparator<Box>() {
@Override
public int compare(Box o1, Box o2) {
if (o1.b > o2.b) return 1;
if (o1.b < o2.b) return -1;
return 0;
}
});
return Arrays.equals(xa, xb);//was deepEquals() - unnecessary
}
答案 0 :(得分:1)
虽然我认为这个问题有一些隐藏的问题......
...如果您只想检查双数组,那么Arrays.equals(a, b)
有什么问题?如果该方法返回false,则您知道数组a,b不包含相同的元素或不是相同的顺序。