如果您正在使用,LinkedList
那么您很可能对索引访问不感兴趣(因为索引访问很慢......但请记住,列表仅存储引用,因此对于很少插入/删除的非常大的列表,您将更多内存效率高,ArrayList
因为它不需要在堆上分配每个节点)
所以你真正想要的是能给你大部分List
合同的东西……或者甚至不是。
很可能你想要的只是能给你的东西Iterable<String>
......如果是这样,那么你的生活就会很轻松:
public class UberIterable<T> implements Iterable<T> {
private final List<List<T>> lists;
public UberIterable(List<T>... lists) {
this.lists = Arrays.asList(lists);
}
public Iterator<T> iterator() {
return new Iterator<T>() {
Iterator<List<T>> metaNext = lists.iterator();
Iterator<T> next;
public boolean hasNext() {
while (true) {
if (next != null && next.hasNext()) return true;
if (metaNext.hasNext()) next = metaNext.next(); else return false;
}
}
public T next() {
if (!hasNext()) throw new NoSuchElementException();
return next.next();
}
public void remove() {
throw new UnsupportedOperation();
}
}
}
}
这是一个基本实现,它将为您提供许多列表的合并视图。如果你想获得更多的合同,List
你可以重复相同的技巧,只有更好的实现ListIterator
才能获得很多你可能想要的东西,或者最后通过用你的新实现扩展AbstractList
和覆盖适当的方法ListIterator