Я объединяю два ArrayList
s со следующим кодом. Код работает и дает мне желаемый результат, но я хочу более эффективную версию. Вот условия.Улучшение производительности слияния двух ArrayLists
- Метод принимает два списка, и оба имеют список элементов в порядке убывания (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