我一直在使用Arrays.asList
做一個二維的ArrayList如下:爲什麼不使用Arrays.asList創建的列表取消裝箱值?
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)
不應該在比較函數內部自動調用unbox的值嗎?
你確定它在第二種情況下工作 - 你確定它不似乎工作,因爲隨機值使結果似乎排序正確? – luk2302
你確定它在第一種情況下不起作用嗎? –
你有沒有嘗試用'equals'替換'=='在比較器中? – XtremeBaumer