对于hashMap 和 List集合不能用for循环边遍历边删除元素 会发生什么异常
时间: 2024-05-21 13:12:41 浏览: 60
如果对于HashMap或List集合使用for循环边遍历边删除元素,会抛出ConcurrentModificationException异常。这是因为在使用迭代器或for-each循环遍历集合时,如果同时对集合进行删除操作,会导致集合的结构发生变化(例如元素的添加或删除),从而使迭代器失效,抛出异常。需要使用迭代器的remove()方法或者利用新的集合存储删除元素后的剩余数据。
相关问题
使用ArrayList集合,对其添加10个不同的元素,并使用四种遍历方式遍历该集合。四种遍历方式分别为使用正常for循环,应用索引遍历使用迭代器遍历使用增强for循环使用Lamada表达式(forEach),选择合适的Map集合保存5位学员的学号和姓名,然后按学号的自然顺序的倒序将这些键值对一一打印出来。
使用ArrayList集合添加10个不同的元素并遍历:
```java
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
list.add("watermelon");
list.add("mango");
list.add("peach");
list.add("pear");
list.add("grape");
list.add("pineapple");
list.add("kiwi");
// 使用普通的for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
// 使用索引遍历
int size = list.size();
for (int i = 0; i < size; i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
// 使用迭代器遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
// 使用增强for循环遍历
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
}
}
```
运行结果:
```
apple banana orange watermelon mango peach pear grape pineapple kiwi
apple banana orange watermelon mango peach pear grape pineapple kiwi
apple banana orange watermelon mango peach pear grape pineapple kiwi
apple banana orange watermelon mango peach pear grape pineapple kiwi
```
使用Map集合保存5位学员的学号和姓名,并按学号的自然顺序的倒序将这些键值对一一打印出来:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1001", "张三");
map.put("1002", "李四");
map.put("1003", "王五");
map.put("1004", "赵六");
map.put("1005", "钱七");
// 按照学号的自然顺序的倒序排序
Map<String, String> sortedMap = new TreeMap<>((o1, o2) -> o2.compareTo(o1));
sortedMap.putAll(map);
// 遍历打印
for (Map.Entry<String, String> entry : sortedMap.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
运行结果:
```
1005 钱七
1004 赵六
1003 王五
1002 李四
1001 张三
```
遍历list map集合
遍历list集合可以使用for循环或者迭代器,例如:
```java
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
// 使用for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 使用迭代器遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
```
遍历map集合可以使用for循环或者迭代器,例如:
```java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// 使用for循环遍历
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
// 使用迭代器遍历
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
注意:使用for循环遍历map集合时,需要使用`map.keySet()`获取key的集合,或者使用`map.entrySet()`获取entry的集合;使用迭代器遍历map集合时,需要使用`map.entrySet().iterator()`获取entry的迭代器。
阅读全文