我正在使用以下代碼合併兩個ArrayList
。代碼工作並給了我想要的結果,但我想要一個更高效的版本。這裏是條件。提高合併兩個ArrayList的性能
- 方法接受兩個列表,並且兩個列表具有以遞減順序(5,4,3,2)
- 方法接受一個整數來決定所得
ArrayList
的大小的元件。 - 第一個輸入列表大小永遠不會超過生成的
ArrayList
的大小。
代碼:
public ArrayList<Integer> mergeList(ArrayList<Integer> first,ArrayList<Integer> second, int n){
//case 1: when both list are null.
if(first == null && second == null)
return null;
//case 2: when first list is null but second list have elements
else if(first == null && second != null){
return second.size() >=n ? new ArrayList<Integer>(second.subList(0, n)) : second;
}
//case 3: when first list have record and second list is null
else if(first != null && second == null){
return first;
}
//case 4: when both list have elements
else {
first.addAll(second);
Collections.sort(first);
Collections.reverse(first);
return first.size()>=n ? new ArrayList<Integer>(first.subList(0, n)) : first;
}
}
}
這是不必要的複雜。 'ArrayList'根據需要擴展,所以不需要預先分配它(不需要參數'int n')。您應該只在開始時分配一次結果列表。我認爲這裏的目標是寫一個適當的合併。連接列表和排序並不是最好的解決方案。如果由於某種原因,您仍然希望這樣做,請按降序排序,以便您不必倒轉列表。 –
@JimGarrison參數n是需求的一部分,所以我無法避免它,但我接受了您的建議並更新了我的代碼。最新的代碼被上傳。 – Ashish
生成的列表是否也需要按相反順序排列?在輸入或結果中是否允許重複? – Bohemian