Eine Ihrer Anforderungen ist es, die ursprünglichen Listen zu erhalten. Wenn Sie eine neue Liste erstellen und die addAll()
verdoppeln Sie effektiv die Anzahl der Verweise auf die Objekte in Ihren Listen. Dies kann zu Speicherproblemen führen, wenn Ihre Listen sehr groß sind.
Wenn Sie das verkettete Ergebnis nicht ändern müssen, können Sie dies mit einer benutzerdefinierten Listenimplementierung vermeiden. Die benutzerdefinierte Implementierungsklasse besteht natürlich aus mehr als einer Zeile... aber ihre Verwendung ist kurz und bündig.
CompositeUnmodifiableList.java:
public class CompositeUnmodifiableList<E> extends AbstractList<E> {
private final List<? extends E> list1;
private final List<? extends E> list2;
public CompositeUnmodifiableList(List<? extends E> list1, List<? extends E> list2) {
this.list1 = list1;
this.list2 = list2;
}
@Override
public E get(int index) {
if (index < list1.size()) {
return list1.get(index);
}
return list2.get(index-list1.size());
}
@Override
public int size() {
return list1.size() + list2.size();
}
}
Verwendung:
List<String> newList = new CompositeUnmodifiableList<String>(listOne,listTwo);
7 Stimmen
Wenn Sie tun dies ausschließlich für Iteration Zwecke siehe eine andere Frage - es gibt Google Guava und Java 8 Lösungen stackoverflow.com/questions/4896662/
0 Stimmen
Java 8-Lösung mit Utility-Methode: stackoverflow.com/a/37386846/1216775
0 Stimmen
Dies ist nur eine der vielen Unzulänglichkeiten der Java Collections API.