L'un de vos exigences, est de préserver les listes initiales. Si vous créez une nouvelle liste et utiliser addAll()
, vous permettant ainsi de doubler le nombre de références aux objets dans vos listes. Cela pourrait conduire à des problèmes de mémoire si votre liste est très grande.
Si vous n'avez pas besoin de modifier le résultat concaténé, vous pouvez éviter cela en utilisant une liste personnalisée de mise en œuvre. La coutume de la mise en œuvre de la classe est plus d'une ligne, bien évidemment...mais il est court et doux.
CompositeUnmodifiableList.java:
public class CompositeUnmodifiableList<E> extends AbstractList<E> {
private final List<E> list1;
private final List<E> list2;
public CompositeUnmodifiableList(List<E> list1, List<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();
}
}
Utilisation:
List<String> newList = new CompositeUnmodifiableList<String>(listOne,listTwo);