错误方法:
List<Integer> resultList = new ArrayList<>(); resultList.add(1); resultList.add(2); resultList.add(3); for (Integer temp : resultList){ if (temp == 1){ resultList.remove(temp); } } System.out.println(resultList.toString());
造成报错
java.util.ConcurrentModificationException
正确方法:
List<Integer> resultList = new ArrayList<>(); resultList.add(1); resultList.add(2); resultList.add(3); resultList.add(4); Iterator<Integer> iterator = resultList.iterator(); while (iterator.hasNext()){ Integer integer = iterator.next(); if (integer == 1){ iterator.remove(); } } System.out.println(resultList.toString());
迭代器接口用四个方法:
(1)next();//越过当前位置到达下一位置,跨度一个单元。
(2)hasNext();//检查集合中是否还有元素(迭代器遍历的时候,如果集合没有元素了会报错,因此是后给你hasNext进行判断。)
(3)remove();//使用前需要搭配next(),否则报错,删除越过的元素。
(4)forEachRemaining(args);这个方法可以搭配lambda表达式对集合中的每个元素进行操作。
注意事项:
UnsupportedOperationException()
解决办法:
将原数组通过流再转换成列表。
1.List<String> list = Arrays.asList(arry).stream().collect(Collectors.toList()); 2.List<String> list = Arrays.stream(arry).collect(Collectors.toList());
两种方式均可。
@Test public void test9() { String[] arry = {"zuoshou3", "zuoshou2", "zuoshou1"}; String str = null; List<String> list = Arrays.stream(arry).collect(Collectors.toList()); ListIterator<String> iterator = list.listIterator(); while(iterator.hasNext()){ str = iterator.next(); if (str == "zuoshou3"){ iterator.remove(); } if (str == "zuoshou2"){ iterator.set("zuoshou2A"); } if (str == "zuoshou1"){ iterator.add("zuoshou1After"); } } list.forEach(System.out::println); }
zuoshou2A zuoshou1 zuoshou1After
注: 文章是本人这段时间所学,如有错误的地方欢迎指正,互相交流!