我試圖實現整數數組的自定義排序。邏輯是:通過距離查找中位數和順序。問題是我試圖使用比較器進行排序,並想知道爲什麼使用List的變體不起作用,而同樣的Arrays.sort爲我工作。Collections.sort(列表<T> t,比較器<T> c)不工作
請在下面的代碼找到下面的代碼,用於List變體的代碼。
public static Integer[] sort(Integer[] array) {
//implement logic here
if (array == null) return null;
final Integer[] tempArray = Arrays.copyOf(array, array.length);
Arrays.sort(tempArray);
final int median = tempArray.length%2==1 ? tempArray[tempArray.length/2] : (tempArray[tempArray.length/2]+tempArray[tempArray.length/2 - 1])/2;
//final List<Integer> t = new ArrayList(Arrays.asList(array));
final Integer[] t = tempArray;
//Collections.sort(t, new Comparator<Integer>()
Arrays.sort(t, new Comparator<Integer>()
{
@Override
public int compare(Integer i1, Integer i2)
{
Integer one = Math.abs(i1 - median);
Integer two = Math.abs(i2 - median);
Integer var1 = one - two;
Integer var2 = two - one;
System.out.println(String.format("Compare:\r\nmedian: %d\r\narg1: %d , arg2: %d\r\n"+
"distance1: %d, distance2: %d\r\nif dist1 > dist2 then compare: %d, else %d", median, i1, i2,one,two, var2,var1));
System.out.println(String.format("\r\nresult: %d %s %d",i1, (one > two?"<":one < two?">":i1.compareTo(i2)>0?">":"<"), i2));
System.out.println("\r\n\r\nNow array is: "+Arrays.asList(t));
System.out.println("-------------------------------");
if (one == two) {
return i1.compareTo(i2);
} else
return one.compareTo(two);
}
});
//tempArray = (Integer[]) t.toArray(new Integer[t.size()]);
return t;
}``
你有什麼輸出?你想要什麼輸出? – Tunaki
由於'tempArray'是'array'的一個副本,而不是一個引用,並且該列表是從'array'而不是'tempArray'創建的,所以你正在對'tempArray'進行兩次排序,但是隻對列表進行一次排序。這可能不是你的實際問題,但它是一個區別,因爲數組「t」已經預先排序,而列表不會。 – Thomas
@Tunaki輸入:{1,10,6,2,3,1,1}我期望輸出:[2,1,1,1,3,6,10],但如果我使用List,{1, 10,6,2,3,1,1}比較方法的每次迭代仍然相同 –