这是使用Java Linked List。我有2个链表。我想通过将第0个列表中的最后一个节点链接到第1个列表中的第0个节点来将它们添加到一起。目前我可以通过遍历第二个列表并将其中的每个元素添加到其中来将它们附加在一起:
LinkedList<HashSet<Integer>> ll = someList;//Some random list
LinkedList<HashSet<Integer>> subSetLl = getSubsets(inSetSub);//Also some list
for (HashSet<Integer> set : subSetLl){
ll.add(set);
}
但是,由于这些是链接列表,因此应该有一种更有效的方法将它们添加到一起,方法是将一个结尾指向下一个的开头。这样的事情存在吗?
编辑CLARITY:当前方法在O(n)中运行,其中n是第一个链接列表的长度。如果两个元素都是链接列表,是否有O(1)方法来实现此目的?
答案 0 :(得分:1)
我认为唯一的方法是复制 LinkedList 类的实现,然后更改 addAll 方法以识别传递的集合是否属于同班。此外,您必须注意,如果您将列表添加到最后 - 它是不安全的,因为可能一个列表中的更改将导致另一个列表中的更改。如果您复制内存并使其安全,那么无论如何都无法提高效率,因为无论如何都要循环遍历元素。
答案 1 :(得分:0)
addAll(Collection c)追加中的所有元素 指定集合到此列表的末尾,按顺序排列 由指定集合的迭代器返回。
public boolean addAll(Collection c)
追加所有 指定集合中的元素到此列表的末尾,在 命令它们由指定的集合的迭代器返回。 如果指定,则此操作的行为未定义 在操作正在进行时修改集合。 (注意 如果指定的集合是此列表,则会发生这种情况 空的。)
<强>参数强>:
c - 包含要添加到此列表中的元素的集合
<强>返回强>:
如果此列表因调用而改变,则为
答案 2 :(得分:0)
LinkedList.addAll(index, Collection)
将指定集合中的所有元素插入到此中 列表,从指定位置开始。目前转移元素 在该位置(如果有的话)和右边的任何后续元素 (增加他们的指数)。新元素将显示在列表中 它们由指定集合返回的顺序 迭代器。