Java 如何从ListIterator中删除所有元素,然后添加新元素
如何从Java 如何从ListIterator中删除所有元素,然后添加新元素,java,iterator,Java,Iterator,如何从列表迭代器中删除所有元素,然后添加新元素。在最后一行添加到迭代器时,我得到了ConcurrentModificationException public static void doAction(List<String> list) { for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext(); ) { String s1 = iterator.n
列表迭代器中删除所有元素,然后添加新元素。在最后一行添加到迭代器时,我得到了ConcurrentModificationException
public static void doAction(List<String> list) {
for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext(); ) {
String s1 = iterator.next();
if(s1.equals("XYZ")){
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
list.add("123");
list.add("456");
list.add("789");
list.forEach(iterator::add);
}
}
}
publicstaticvoiddoAction(列表){
for(ListIterator迭代器=list.ListIterator();iterator.hasNext();){
字符串s1=迭代器.next();
如果(s1等于(“XYZ”)){
while(iterator.hasNext()){
iterator.next();
iterator.remove();
}
列表。添加(“123”);
列表。添加(“456”);
列表。添加(“789”);
forEach(迭代器::add);
}
}
}
出现异常的原因是,您在迭代列表时试图将其添加到列表中<代码>列表#forEach
将快速失败,并且仍将在迭代过程中对基础列表中的ConcurrentModificationException
进行结构修改(即在您的情况下,迭代器::add
操作)
现在,出于您想要实现的目的,可以像这样重新编写和修改您的方法:
public static void doAction(List<String> list) {
if (list.contains("XYZ")) {
list.clear();
list.add("123");
list.add("456");
list.add("789");
}
}
publicstaticvoiddoAction(列表){
if(列表包含(“XYZ”)){
list.clear();
列表。添加(“123”);
列表。添加(“456”);
列表。添加(“789”);
}
}
这是更直接,更容易遵循。您只需检查您要查找的值是否存在于给定列表中,然后只需调用
list#clear
即可清空传入的值。然后,您将添加新元素,就可以开始了。要执行您想要执行的操作,请进行所需的更改
List<String> list = ArrayList<>(List.of("ABC","DEF", "GHI", "XYZ", "JKL", "MNO"));
public static void doAction(List<String> list) {
for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext(); ) {
String s1 = iterator.next();
if(s1.equals("XYZ")){
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
list.add("123");
list.add("456");
list.add("789");
break; // add this
// list.forEach(iterator::add); // delete this
}
}
}
列表列表=数组列表(列表中的“ABC”、“DEF”、“GHI”、“XYZ”、“JKL”、“MNO”);
公共静态无效操作(列表){
for(ListIterator迭代器=list.ListIterator();iterator.hasNext();){
字符串s1=迭代器.next();
如果(s1等于(“XYZ”)){
while(iterator.hasNext()){
iterator.next();
iterator.remove();
}
列表。添加(“123”);
列表。添加(“456”);
列表。添加(“789”);
break;//添加这个
//list.forEach(迭代器::add);//删除此
}
}
}
它会打印
[ABC,DEF,GHI,XYZ,123456789]
但我相信一个更干净的方法是
List<String> list = ArrayList<>(List.of("ABC","DEF", "GHI", "XYZ", "JKL", "MNO"));
public static void doAction(List<String> list) {
ListIterator<String> it = list.listIterator();
while (it.hasNext()) {
if (it.next().equals("XYZ")) {
while (it.hasNext()) {
it.next();
it.remove();
}
}
}
list.add("123");
list.add("456");
list.add("789");
}
List List=ArrayList(列表中的“ABC”、“DEF”、“GHI”、“XYZ”、“JKL”、“MNO”);
公共静态无效操作(列表){
ListIterator it=list.ListIterator();
while(it.hasNext()){
if(it.next().equals(“XYZ”)){
while(it.hasNext()){
it.next();
it.remove();
}
}
}
列表。添加(“123”);
列表。添加(“456”);
列表。添加(“789”);
}