Вот так:
ArrayList<Integer> a = new ArrayList<Integer>(
Arrays.asList(new Integer[]{0, 1, 5}));
ArrayList<Integer> b = new ArrayList<Integer>(
Arrays.asList(new Integer[]{3, 4, 2}));
int sA = a.size();
int sB = b.size();
for (int i = 0, j = 0; i < sA && j < sB; i++, j++) {
int iA = a.get(i);
int iB = b.get(j);
if (iA < iB) {
b.add(iA);
a.remove(i--);
sA--;
} else if (iA > iB) {
a.add(iB);
b.remove(j--);
sB--;
}
}
System.out.println("a: " + a);
System.out.println("b: " + b);
Вывод:
a: [5, 2]
b: [3, 4, 0, 1]
Предположим, что в первом списке есть N1
элементов, во втором списке N2
элементов, числоколичество итераций всегда будет ограничено меньшими из N1
и N2
.например, если N1
равно 10, а N2
равно 11, будет не более 10 итераций.
Когда элемент переносится из одного списка в другой, мы уменьшаем счетчик индекса, а также общее количествоколичество элементов, которые нам нужно посмотреть для списка, из которого элемент был только что удален;нас не волнует список, в который был добавлен элемент, потому что он всегда добавляется в конце, и мы никогда не будем заходить так далеко в цикле.
Сравнения между соответствующими элементами в исходных списках ранееони модифицированы.В приведенном выше примере 5 сравнивается с 2, даже если 5 находится в индексе 0 в первом списке, а 2 - в индексе 2 во втором списке к моменту фактического сравнения.