在Java中用另一个列表替换子列表

问题描述:

Java中是否存在类似List的容器,它提供了在给定子列表的开始和结束的迭代器的情况下,在常量时间内用另一个列表替换子列表的功能?在Java中用另一个列表替换子列表

例如,我可以做到以下几点:

List<T> l1, l2; 
ListIterator<T> i1, i2; 

// Initialize the above variables correctly... 

l1.replace(i1, i2, l2); 

如果我是我自己的滚动链接的列表,这将是容易的,所以我会假设这是用正宗可行的任务。

在此先感谢!

不,没有办法在固定时间内使用内置的API来执行此操作。

如果我在滚动我自己的链表,这很容易,所以我认为这是一个使用集合的可行任务。

不完全。即使滚动自己的实现,你不能以一种

  • 只会改变l1,不l2
  • 将让你与l3,做同样的操作不止一次,也许这样做在一定时间l2

很容易想象,如果这是建立在JDK的API,可能会导致意外的行为,这是非常令人不快的调试这些问题。

+0

你对这种影响l2的行为是正确的。在我的情况下,这并不重要,因为l2是为了插入到l1而严格创建的,并且从不以其他方式访问。有意义的是,这通常不是理想的行为。我没有想过副作用。非常感谢! – fwilliams

+0

不知道在哪里保证的地方,替换发生在不变的时间。 Afaik它实际上会迭代子列表中的每个元素并将其添加到当前列表中。 – Alowaniak

+0

如何删除?如果有匹配,removeAll似乎相当于删除。还有是在O(1)时间实现addAll的AbstractList的实现吗? – fwilliams