可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个 只读集合,这样改变集合 的任何 *** 作都会抛出 Java. lang. UnsupportedOperationException 异常。 示例代码如下:
List2. 如何边遍历边移除 Collection 中的元素?list = new ArrayList<>(); list. add("x"); Collection clist = Collections. unmodifiableCollection(list); clist. add("y"); // 运行时此行报错 System. out. println(list. size());
边遍历边修改 Collection 的唯一正确方式是使用 Iterator.remove() 方法,如下:
Iteratorit = list.iterator(); while(it.hasNext()){ *// do something* it.remove(); }
一种 常见的错误代码如下:
Listlist = new ArrayList<>(); for(Integer i : list){ list.remove(i); } 运行以上错误代码会报 ConcurrentModificationException 异常。这是因为当使用 foreach(for(Integer i : list)) 语句时,会自动生成一个iterator 来遍历该 list,但同时该 list 正在被主线程的list.remove() 修改。 Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)