本文主要演示遍历List、Map时的添加、删除元素操作。
关于List和Map相关的遍历问题,笔者已在《Java常用数据结构基础知识总结(二)》一文中做了简要介绍,如有需要的可以参考,此处不再赘述。
源码如下:
1.基于List的操作
package com.ldl.cn.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
// byFor(list);
// byForEach(list);
// byIterator(list);
// byListIterator(list);
}
private static void byFor(List<String> list){
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("2")) {
// list.remove(i); //OK
// list.add("666"); //OK
}
}
System.out.println(list);
}
private static void byForEach(List<String> list){
for (String string : list) {
if (string.equals("2")) {
// list.remove(string);//OK
// list.add("666"); //java.util.ConcurrentModificationException
}
}
System.out.println(list);
}
private static void byIterator(List<String> list){
if (list.isEmpty()) {
return ;
}
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
if (string.equals("1")) {
// list.remove(string); //java.util.ConcurrentModificationException
// iterator.remove();//OK
}
// if (string.equals("2")) {
// list.add("555"); //java.util.ConcurrentModificationException
// }
}
System.out.println(list);
}
private static void byListIterator(List<String> list){
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
// if (iterator.next().equals("2")) {
// iterator.remove();
// }//OK
// if (iterator.next().equals("1")) {
// iterator.add("666");
// }//OK 注意不能同时使用remove和add
}
System.out.println(list);
}
}
2.基于Map的操作
package com.ldl.cn.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("1", "111");
map.put("2", "222");
map.put("3", "333");
// byFor(map);
// byIterator(map);
byIterator2(map);
}
private static void byFor(Map<String, Object> map){
if (map.isEmpty()) {
return;
}
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getValue().equals("111")) {
map.remove(entry.getKey()); //java.util.ConcurrentModificationException
}
}
System.out.println(map);
}
private static void byIterator(Map<String, Object> map){
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
if (map.get(iterator.next()).equals("111")) {
iterator.remove(); //OK
}
}
System.out.println(map);
}
private static void byIterator2(Map<String, Object> map){
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Object> entry = iterator.next();
if (entry.getValue().equals("111")) {
iterator.remove();//OK
// map.put(entry.getKey(), entry.getValue()+"666");//OK
}
}
System.out.println(map);
}
}
读者可以尝试运行,运行结果在源码中以注释体现。