Java 迭代ArrayList,其中每个元素只调用一次
我正在使用ListIterator对ArrayList进行迭代。在遍历ArrayList时,我使用ListIterator添加和删除元素。 问题是每次我添加一个元素时,新元素也会被迭代。但是我只想迭代列表中的初始元素,而不是新添加的元素 如何做到这一点Java 迭代ArrayList,其中每个元素只调用一次,java,arraylist,listiterator,Java,Arraylist,Listiterator,我正在使用ListIterator对ArrayList进行迭代。在遍历ArrayList时,我使用ListIterator添加和删除元素。 问题是每次我添加一个元素时,新元素也会被迭代。但是我只想迭代列表中的初始元素,而不是新添加的元素 如何做到这一点 谢谢大家。您可能正在寻找set方法: import java.util.*; public class IterDemo { public static void main(String[] args) { List&l
谢谢大家。您可能正在寻找
set
方法:
import java.util.*;
public class IterDemo {
public static void main(String[] args) {
List<String> arrayList = new ArrayList() {{
add("one");
add("two");
add("three");
}};
System.out.println("Before: " + arrayList);
ListIterator<String> iter = arrayList.listIterator();
while(iter.hasNext()) {
String s = iter.next();
iter.set(s.toUpperCase());
}
System.out.println("After: " + arrayList);
}
}
import java.util.*;
公共类IterDemo{
公共静态void main(字符串[]args){
List arrayList=新建arrayList(){{
添加(“一”);
添加(“两”);
添加(“三”);
}};
System.out.println(“之前:“+arrayList”);
ListIterator iter=arrayList.ListIterator();
while(iter.hasNext()){
字符串s=iter.next();
iter.set(s.toUpperCase());
}
System.out.println(“之后:“+arrayList”);
}
}
这取决于您希望结果列表的外观
如果您对新元素存在于原来的元素中感到满意,那么您可以以ZouZou的示例为例,使用ListIterator
add()
和remove()
方法
final List<Integer> list = new ArrayList<Integer>(Arrays.asList(2,3,4,5,6));
final ListIterator<Integer> ite = list.listIterator();
while( ite.hasNext() ) {
if( ite.next() %2 == 0 ) {
ite.add( 7 );
}
else {
ite.remove(); //removes the last value returned by next()
}
}
final List List=newarraylist(Arrays.asList(2,3,4,5,6));
final ListIterator ite=list.ListIterator();
while(ite.hasNext()){
如果(ite.next()%2==0){
增加(7);
}
否则{
ite.remove();//删除next()返回的最后一个值
}
}
输出:
列表=[2,7,4,7,6,7]
但是,如果希望新元素都在原始元素之后,那么第二个集合是最佳选择
final List<Integer> list = new ArrayList<Integer>(Arrays.asList(2,3,4,5,6));
final List<Integer> newList = new ArrayList<Integer>(list);
final ListIterator<Integer> ite = list.listIterator();
while( ite.hasNext() ) {
final Integer next = ite.next();
if( next % 2 == 0 ) {
newList.add( 7 );
}
else {
newList.remove(next);
}
}
final List List=newarraylist(Arrays.asList(2,3,4,5,6));
最终列表newList=新的ArrayList(列表);
final ListIterator ite=list.ListIterator();
while(ite.hasNext()){
最终整数next=ite.next();
如果(下一个%2==0){
新增(7);
}
否则{
newList.remove(下一步);
}
}
输出:
newList=[2,4,6,7,7]
就我个人而言,我一直喜欢使用第二个集合方法,因为它避免了通过索引进行迭代时出现
ConcurrentModificationException
的可能性。No插入的新元素不会被迭代。如文档所述,“新元素插入到隐式游标之前:对下一步的后续调用将不受影响”,例如程序:List List=new ArrayList(Arrays.asList(2,1));ListIterator ite=list.ListIterator();while(ite.hasNext()){if(ite.next()%2==0){ite.add(4);}}
正确终止并输出[2,4,1]
。您还可以将元素添加到临时列表,然后将其添加到loop.CopyOnWriteArrayList之后的原始列表中?