java中for循环、增强for循环、迭代器的删除操作使用注意(以Arraylist为例)
- for循环
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("z");
list.add("s");
list.add("a");
//for循环遍历
//注意删除元素后集合长度发生,i一直向后增加
for (int i = 0; i < list.size(); i++) {
if (list.get(i)=="a"){
list.remove(i);
//i--;可以对循环进行干涉,达到目的
}
}
}
结果:
[a, z, s]
2. 增强for循环
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("z");
list.add("s");
list.add("a");
//增强for循环
//不允许遍历时对元素进行操作,如果进行操作会抛出异常ConcurrentModificationException
for (Object obj:list) {
if (obj.equals("a")){
list.remove(obj);
break;//操作一次后必须break结束循环,否则会抛出异常
}
}
System.out.println(list);
}
未加break结果
Exception in thread “main” java.util.ConcurrentModificationException
at java.util.ArrayList
I
t
r
.
c
h
e
c
k
F
o
r
C
o
m
o
d
i
f
i
c
a
t
i
o
n
(
A
r
r
a
y
L
i
s
t
.
j
a
v
a
:
911
)
a
t
j
a
v
a
.
u
t
i
l
.
A
r
r
a
y
L
i
s
t
Itr.checkForComodification(ArrayList.java:911) at java.util.ArrayList
Itr.checkForComodification(ArrayList.java:911)atjava.util.ArrayListItr.next(ArrayList.java:861)
at collection.day3.CunDemo.main(CunDemo.java:26)
加上break结果
[a, a, z, s, a]
- 迭代器
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("z");
list.add("s");
list.add("a");
Iterator iterator = list.iterator();
//hasNext() 如果迭代具有更多元素,则返回 true 。
while(iterator.hasNext()){
Object obj = iterator.next();//返回迭代中的下一个元素。
iterator.remove();//Iterator中特有方法remove删除元素,从底层集合中删除此迭代器返回的最后一个元素(可选操作)。
}
System.out.println(list);*/
}
结果
[]
本文地址:https://blog.csdn.net/qdzjo/article/details/109891439
上一篇: 实验五 输入输出练习_JAVA
下一篇: 无序符号表