黑马程序员技术交流社区

标题: 怎么在遍历map的时候,对map中的对象进行增删除而不抛异常 [打印本页]

作者: nuddlesW    时间: 2014-12-9 23:56
标题: 怎么在遍历map的时候,对map中的对象进行增删除而不抛异常
如题,求解
作者: 史云龙    时间: 2014-12-11 15:44
map的元素使用的是迭代器,在迭代时,不可以通过集合对象的方法操作集合中的元素的。
这个是没有办法的,如果你想要操作Map元素的话,
只有将map的key值或者Map.Entry取出来放入到list中,重新遍历list,然后使用map的方法操作元素。
作者: 钟伟    时间: 2014-12-11 16:00
  1. public class MapTest {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub

  4.                
  5.                 Map<String, Integer> mp = new TreeMap<String, Integer>();
  6.                 mp.put("张三",25);
  7.                 mp.put("李四", 38);
  8.                 mp.put("王五", 46);
  9.                 mp.put("赵六", 78);
  10.                
  11.                 Set<Map.Entry<String, Integer>> s = mp.entrySet();
  12.                 for(Iterator<Entry<String, Integer>> it = s.iterator(); it.hasNext();){
  13.                         Map.Entry<String, Integer> me = it.next();
  14.                         //操作元素
  15.                         if(me.getKey().equals("张三"))
  16.                                 it.remove();
  17.                         if(me.getValue().equals("78"))
  18.                                 it.remove();
  19.                        
  20.                 }
  21.                 System.out.println(mp);
  22.                
  23.         }

  24. }
复制代码

作者: lwj123    时间: 2014-12-11 16:17
不行吧,改的话会报错
作者: nuddlesW    时间: 2014-12-15 13:34
钟伟 发表于 2014-12-11 16:00

这样只能remove(),还是不能put()啊
作者: 钟伟    时间: 2014-12-15 14:29
nuddlesW 发表于 2014-12-15 13:34
这样只能remove(),还是不能put()啊

遍历的时候只能删除,增加不了,什么题非要在map集合遍历的时候加入元素?
作者: a371166028    时间: 2014-12-15 18:05
同步修改异常,  可以使用,迭代器来避免,
作者: a371166028    时间: 2014-12-15 18:07
keyset.iterator...如果不行就专程list..用listiterator这个是肯定行的
作者: nuddlesW    时间: 2014-12-15 22:29
钟伟 发表于 2014-12-15 14:29
遍历的时候只能删除,增加不了,什么题非要在map集合遍历的时候加入元素? ...

阳哥技术测试28期
作者: 農邨尛夥兒    时间: 2014-12-15 22:53
开天开始学习这个 嘿嘿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2