在 Java 中以恒定时间合并两个列表
有谁知道是否可以在Java中以恒定时间合并两个列表(或任何集合)?
http://www.cppreference.com/wiki/stl/list/splice
在C中使用链接列表很容易做到这一点...
谢谢
有谁知道是否可以在Java中以恒定时间合并两个列表(或任何集合)?
http://www.cppreference.com/wiki/stl/list/splice
在C中使用链接列表很容易做到这一点...
谢谢
据我所知,JDK库中的类不支持此功能。
如果你构建自己的实现是可能的 - 你可以自由地做,这是完全合法的。您可以使用 s 并识别要添加的集合也是 .List
LinkedList
LinkedList
在记录类时,您需要指出添加的对象将成为新对象的一部分,换句话说,许多通用性都丢失了。还有很多潜在的错误:在加入后更改原始列表(如果它们是可变的)将允许您创建一个具有间隙或具有两个尾部的列表。此外,大多数其他操作也不会从您被黑客入侵的类中受益。换句话说,乍一看,这似乎是一个疯狂的想法。
请注意,“合并”列表通常具有不同的含义;例如,在合并排序列表时,人们会期望生成的列表具有相同的顺序。你所谈论的加入两个链接列表实际上更好地称为“拼接”。或者只是“加入”。
您可以围绕多个 s 实现复合“包装器”。为简单起见,我使我的示例不可变,但您始终可以实现附加到存储在复合对象中的“final”。List
add
List
public class CompositeImmutableList<T> implements List<T> {
private final List<T> l1;
private final List<T> l2;
public CompositeImmutableList(List<T> l1, List<T> l2) {
this.l1 = l1;
this.l2 = l2;
}
public boolean add(T t) {
throw new UnsupportedOperationException();
}
public int size() {
return l1.size() + l2.size();
}
public T get(int i) {
int sz1 = l1.size();
return i < s1 : l1.get(i) : l2.get(sz1 - i);
}
// TODO: Implement remaining List API methods.
}