How do I join two lists in Java?

后端 未结 30 2045
旧巷少年郎
旧巷少年郎 2020-11-22 14:36

Conditions: do not modifiy the original lists; JDK only, no external libraries. Bonus points for a one-liner or a JDK 1.3 version.

Is there a simpler way than:

30条回答
  •  無奈伤痛
    2020-11-22 15:28

    import java.util.AbstractList;
    import java.util.List;
    
    
    /**
     * The {@code ConcatList} is a lightweight view of two {@code List}s.
     * 

    * This implementation is not thread-safe even though the underlying lists can be. * * @param * the type of elements in this list */ public class ConcatList extends AbstractList { /** The first underlying list. */ private final List list1; /** The second underlying list. */ private final List list2; /** * Constructs a new {@code ConcatList} from the given two lists. * * @param list1 * the first list * @param list2 * the second list */ public ConcatList(final List list1, final List list2) { this.list1 = list1; this.list2 = list2; } @Override public E get(final int index) { return getList(index).get(getListIndex(index)); } @Override public E set(final int index, final E element) { return getList(index).set(getListIndex(index), element); } @Override public void add(final int index, final E element) { getList(index).add(getListIndex(index), element); } @Override public E remove(final int index) { return getList(index).remove(getListIndex(index)); } @Override public int size() { return list1.size() + list2.size(); } @Override public boolean contains(final Object o) { return list1.contains(o) || list2.contains(o); } @Override public void clear() { list1.clear(); list2.clear(); } /** * Returns the index within the corresponding list related to the given index. * * @param index * the index in this list * * @return the index of the underlying list */ private int getListIndex(final int index) { final int size1 = list1.size(); return index >= size1 ? index - size1 : index; } /** * Returns the list that corresponds to the given index. * * @param index * the index in this list * * @return the underlying list that corresponds to that index */ private List getList(final int index) { return index >= list1.size() ? list2 : list1; } }

提交回复
热议问题