Чтобы завершить круг знаний, вот реализация ответов @ unbeli's / Wikipedia.
public List<T> mergeOrdered(final List<T> list0, final List<T> list1) {
List<T> result = new ArrayList<T>();
while (list0.size() > 0 && list1.size() > 0) {
if (list0.get(0).compareTo(list1.get(0)) < 0) {
result.add(list0.get(0));
list0.remove(0);
}
else {
result.add(list1.get(0));
list1.remove(0);
}
}
if (list0.size() > 0) {
result.addAll(list0);
}
else if (list1.size() > 0) {
result.addAll(list1);
}
return result;
}
Обратите внимание, что списки, созданные с использованием Arrays.asList()
, приведут к массиву фиксированной длины , из которого элементы не могут быть удалены, поэтому убедитесь, что вы передаете динамические списки!
public List<T> buildDynamicListFromArray(final T[] arr0) {
List<T> result = new ArrayList<T>();
int len = arr0.length;
for (int i = 0; i < len; i++) {
result.add(arr0[i]);
}
return result;
}