java 遍历集合的时候对集合进行操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 遍历集合的时候对集合进行操作相关的知识,希望对你有一定的参考价值。

例如我有一个HashMap类型的集合
for(int i : map.keySet())

map.remove(i);


这样对集合进行操作的时候就会出现异常
请问怎么样才能在遍历集合时候进行操作
因为我要进行一些元素的删除或者操作。

这个for是调用了集合上的iterator,则个时候不能对集合进行操作,操作是不安全的,原因很简单:
如果集合元素的个数发生变化,会造成原来的iterator发生越界遍历,或者遍历到不正确的元素,所以,建议你不要再遍历的时候删除或者增加元素,而是将要删除的元素的引用保存下来,然后最后一起删除
参考技术A 遍历的时候对集合进行并发操作本来就是不安全的, 如果一定要这么做就参考java api, 里面提供了线程安全的集合, 可以在遍历的同时就行修改操作 参考技术B 在你遍历的时候可以用一个 Set 暂存你要删除的 key,遍历完成之后再按照这个 Set 中的key进行删除。本回答被提问者采纳 参考技术C Map map=new HashMap();
map.put("1", "one");
map.put("2","two");
for(Object obj:map.keySet())
System.out.println( map.get(obj));
参考技术D Iterator<String> item = cacheManager.getCaches().iterator();
while (item.hasNext()) 
    String str = item.next();
    if (str.length()==0) 
        item.remove();
    

以上是关于java 遍历集合的时候对集合进行操作的主要内容,如果未能解决你的问题,请参考以下文章

Java 之 Stream 流

java中的Stream流

java并发:CopyOnWriteArrayList简单理解

集合已修改;可能无法执行枚举操作。

Stream流

Java基础-Stream流方法引用篇