我的代码中有两个LinkedList,我需要创建一个包含两个的.我将不再需要这个列表,只需要新的列表,它包含我需要的所有数据.
我可以使用.addAll(),但性能是一个巨大的问题,我不能等待复制,添加引用,每次都...
如果我们创建自己的链表,我正在寻找像往常一样的东西,只需将最后一个节点从一个连接到第二个节点.有没有办法使用java api中的LinkedList类?
合并集合是一个不同的情况,虽然操作意味着几乎相同,但我的问题仅仅是关于性能和链接列表,通常可以做我需要的."合并"也是一个含糊不清的术语,我想要的只是将它们放在一起,无论它们是什么顺序,都考虑到性能.我不知道是否有可能合并......
另一件事,我的问题只是关于API,我不是在寻找构建我自己的代码(老板要求),这就是为什么与这个不同的原因:在Java中用恒定时间合并两个列表 - 那里没有有用的答案..
如果您正在使用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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个基本的实现,它将为您提供许多列表的合并视图。如果您想获得更多的合同,List您可以重复相同的技巧,只有更好的实现ListIterator才能获得您可能想要的很多东西,或者最终通过使用新的实现扩展AbstractList和覆盖适当的方法ListIterator