衆所周知,自動裝箱可以是計算密集型的,但在我看來,允許原始數組自動裝箱到等價的排序方法是一個合適的邊緣情況,特別是當基於某些外部計算對值進行排序時。爲什麼在使用Arrays.sort()時自動裝箱不允許用於原始數組?
我之前有一個問題,需要根據基於索引值的計算結果對給定的原始數組int
進行排序。但是,java.util.Comparator
不允許任何實施類和compare(T x, T y)
方法的原始類型。的
因此,而不是做一些像
public void sortRow(int row){
Arrays.sort(this.buffer[row], new Comparator<Integer>(){
@Override
public int compare(int x, int y){
return (PhotoUtils.getBrightnessValue(x) <= PhotoUtils.getBrightnessValue(y) ? x : y;
}
}
}
我不得不實施第二步:
public void sortRow(int row){
Integer[] tempArray = new Integer[this.buffer[row].length];
for (int i = 0; i < tempArray.length; i++)
tempArray[i] = this.buffer[row][i];
Arrays.sort(tempArray, new Comparator<Integer>(){
@Override
public int compare(Integer x, Integer y){
return (PhotoUtils.getBrightnessValue(x) <= PhotoUtils.getBrightnessValue(y) ? x : y;
}
}
}
dup:http://stackoverflow.com/questions/4558081/why-i-cant-use-comparator-to-sort-primitives –
Autoboxing數組將涉及到創建一個循環來複制數組元素。這比單個元素的相對簡單的邏輯複雜得多。此外,自動拆箱數組元素會有幾個不明確的複雜情況。對於排序情況,對於每種基本類型都有單獨的比較/排序例程更有意義。 –
如果第三方庫是公平遊戲,使用[Guava](https://code.google.com/p/guava-libraries/),您可以執行Collections.sort(Ints.asList(int []),new比較器(){...})'。 –