私は次のように二次元のArrayListを作るためにArrays.asList
を使用している:Arrays.asListで作成したリストで値をunboxしないのはなぜですか?
ArrayList<List<Integer>> li = new ArrayList<List<Integer>>();
for(int i = 0; i < 100; i++){
li.add(Arrays.asList(1, (int)(Math.random() * 100)));
}
私は次のように要素を並べ替えるしようとすると:
Collections.sort(li, new Comparator<List<Integer>>(){
public int compare(List<Integer> l1, List<Integer> l2){
if(l1.get(0) == l2.get(0)){
return l1.get(1) - l2.get(1);
}
return l1.get(0) - l2.get(0);
}
});
要素が第二で正しくソートされていませんインデックス。しかし
、私はArrays.asList
を使用するが、そのような、新しいArrayListを作成しないでください:
ArrayList<List<Integer>> li = new ArrayList<List<Integer>>();
for(int i = 0; i < 100; i++){
ArrayList<Integer> toAdd = new ArrayList<Integer>();
toAdd.add(1);
toAdd.add((int)(Math.random() * 100));
li.add(toAdd);
}
その後、
ソート作品を。
Arrays.asListは値をコピーせず、元の配列によって "バックアップ"されていることを理解しています。しかし、get(0)
をcompare関数内で呼び出しても、値を自動的にunboxするべきではありませんか?
if(l1.get(0) == l2.get(0)) {
}
それは与えられたコードで常に1
あるすべてのリストの最初のインデックスを比較しています。私は見つけることができ
2番目のケースでは正常に動作していますか?結果にランダムな値が正しくソートされているように見えるため、正常に動作していないことは確かですか? – luk2302
最初のケースではうまくいきませんか? –
あなたは '=='を 'equals'でコンパレータ内に置き換えようとしましたか? – XtremeBaumer