3 番目のインデックス配列の使用例。これが最適な実装かどうかはわかりません。
import java.util.*;
public class Sort {
private static void printTable(String caption, Integer[] numbers,
Integer[] colors, Integer[] sortOrder){
System.out.println(caption+
"\nNo Num Color"+
"\n----------------");
for(int i=0;i<sortOrder.length;i++){
System.out.printf("%x %d %d\n",
i,numbers[sortOrder[i]],colors[sortOrder[i]]);
}
}
public static void main(String[] args) {
final Integer[] numbers = {1,4,3,4,2,6};
final Integer[] colors = {0x50,0x34,0x00,0xfe,0xff,0xff};
Integer[] sortOrder = new Integer[numbers.length];
// Create index array.
for(int i=0; i<sortOrder.length; i++){
sortOrder[i] = i;
}
printTable("\nNot sorted",numbers, colors, sortOrder);
Arrays.sort(sortOrder,new Comparator<Integer>() {
public int compare(Integer a, Integer b){
return numbers[b]-numbers[a];
}});
printTable("\nSorted by numbers",numbers, colors, sortOrder);
Arrays.sort(sortOrder,new Comparator<Integer>() {
public int compare(Integer a, Integer b){
return colors[b]-colors[a];
}});
printTable("\nSorted by colors",numbers, colors, sortOrder);
}
}
出力は次のようになります。
ソートされていません
ナンバーカラーなし
----------------
0 1 80
1 4 52
2 3 0
3 4 254
4 2 255
5 6 255
番号順
ナンバーカラーなし
----------------
0 6 255
1 4 52
2 4 254
3 3 0
4 2 255
5 1 80
色別に並べ替え
ナンバーカラーなし
----------------
0 6 255
1 2 255
2 4 254
3 1 80
4 4 52
5 3 0