java重复链接列表
我想复制链接列表中的元素。这就是我尝试过的:
public class duplicate {
public static void main(String[] args) {
LinkedList <Integer> list = new LinkedList<Integer>() ;
list.add(2);
list.add(3);
list.add(4);
list.add(1);
list.add(0);
for( int i= 0 ; i<list.size(); i++) {
list.addAll(list);
System.out.println(list);
break;
}
}
}
但我有一个无限循环
# 1 楼答案
首先,您的代码runs just fine(代码
break
阻止了无限循环,请参见JLS-The break Statement)现在,您不需要对列表进行for循环,因为^{} 已经
那么,顺便说一下,你很好:
但是,如果您想使用^{} 而不是
List.addAll
,您可以使用like this(需要为循环使用):# 2 楼答案
您在for循环中一次又一次地添加列表元素
每一次它都会成长&;这会导致每次迭代的规模不断增长。纠正步骤。使用局部变量存储大小或更改逻辑
# 3 楼答案
您只需执行
list.addAll(list);
如果要将
add
方法用作练习,则需要在开始迭代之前小心地保存列表的原始大小。您可以在for循环的初始化部分执行此操作:现在您会注意到上面使用的是ArrayList,而不是LinkedList。一般来说,您应该更喜欢ArrayList。甚至是Java的LinkedList says he doesn't use it的作者。另见this SO question about ArrayList vs LinkedList
如果您有使用LinkedList,您可以将上面的第二行替换为:
代码的其余部分可以保持不变。但是,如果列表很长,那么使用
LinkedList
类的get(index)
方法可能会降低性能。在LinkedList中,如果迭代(使用LinkedList.iterator()
或增强的for循环,比使用带有get()
的普通for循环获得更高的性能电话。但是在添加到列表时不能迭代列表,因为这样会得到ConcurrentModificationException。相反,您可以将链接列表复制到数组中,并在该数组上迭代,同时添加到列表中: