Если я правильно понял ваш вопрос, вам нужно что-то вроде этого
int size = list2.size();
for(int i = 0; i < size ; i++) {
if(!list1.get(i).contentEquals(list2.get(i))) {
if(list2.size() <= list1.size()) {
list2.add(i, "XXX");
size +=1;
} else {
list1.add(i, "XXX");
}
}
}
И результат будет:
three three
two XXX
ten ten
XXX two
five five
Я добавил XXX, чтобы их было легче просматривать. Вы также должны проверить случай, когда списки не равны по размеру, так как это может изменить ожидаемый результат вашей программы.
UPDATE:
Вы можете попробовать сделать что-то вроде этого.
int size = list1.size();
for(int i = 0; i < size; i++) {
if(list1.size() == i){
list1.add(i, "XXX");
continue;
}
if(list2.size() == i){
list2.add(i, "XXX");
continue;
}
if(!list1.get(i).contentEquals(list2.get(i))) {
int next_index1 = list2.subList(i, list2.size()).indexOf(list1.get(i));
int next_index2 = list1.subList(i, list1.size()).indexOf(list2.get(i));
if (next_index1 == -1){
list2.add(i, "XXX");
}
else if(next_index2 == -1){
list1.add(i, "XXX");
}
else if(next_index1 < next_index2) {
list1.add(i, "XXX");
} else {
list2.add(i, "XXX");
}
}
size = list1.size() < list2.size() ? list2.size() : list1.size();
}
for(int i = 0; i < size ; i++) {
System.out.println(list1.get(i) + " " + list2.get(i));
}
Вкратце, он проверит, когда наиболее близко вхождение строки в другом списке. Например, если ваши списки:
three three
two ten
ten two
five five
После первых элементов в каждом списке, поскольку они одинаковы, он найдет расстояние между текущей позицией в первом списке и индексом первого вхождения этого элемента во втором списке и наоборот. Если расстояния равны, то во втором списке будет добавлено место. Таким образом, результат будет
three three
two XXX
ten ten
XXX two
five five
Но если ваш список
three three
two ten
five two
, результат будет
three three
XXX ten
two two
five XXX