本文主要演示遍历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); } }读者可以尝试运行,运行结果在源码中以注释体现。