java 板


LINE

1F:→ adrianshum: 一般map 应该会concurrent modification exception 11/28 22:34
2F:→ adrianshum: 之类吧,iterate 过程中remove... 11/28 22:34
对不起, 我考虑不周, 上面的程式真的会 ConcurrentModificationException
3F:→ Cavalier: 是的 正确方法是 break 以後再 remove 11/29 02:46
break 之後再 remove 吗? 不过以 for each 来说, break 之後就拿不到里面的变数 key 了 这样还有办法 remove 吗? for (Object key : hashmap.keySet()) { if (hashmap.get(key) == target) { hashmap.remove(key); break; } } 倒是 break 加在最後就可以正常执行了
4F:→ qrtt1: 用 iterator 去 remove 比较方便 11/29 07:32
确实用 iterator 改写就不会例外了 Iterator it = hashmap.keySet().iterator(); while(it.hasNext()) { if(hashmap.get(it.next()) == target) { it.remove(); } } 其实我自己用过几次这个方法 就天真的以为反正 for each 也是 compiler 自动帮你展开 iterator 所以 for each 应该也可以正常的移除元素 不过事情没有这麽简单, 今天看了 ConcurrentModificationException 的文件 跟 HashMap 原始码发现有所谓的 fail-fast 机制 HashMap 里面有个变数 modCount 计算了 HashMap 被修改的次数 Iterator 还有另外一个变数 expectedModCount 在开始的时候 expectedModCount = modCount 只要 iterate 中这两个数字兜不起来马上丢出例外, 用意可能是想预防错误吧 毕竟这样做会发生什麽结果完全无法预期 甚至 for each 里面写个 add() put() 之类的进去还会无穷回圈 XD 只有 Iterator.remove() 这个方法不会触发例外 因为逻辑上来说这种操作不会有出错的可能 请问这样的理解正确吗?
5F:推 jej: 用iterator+1 用map.remove反序的时候会遇到可怕的状况 11/29 22:20
这我就看不懂了, 反序? map 不是没有顺序吗? 愿闻其详 - 上面打了一堆, 回头又翻了一下文件 结果文件早就说得很明白了 QQ If the map is modified while an iteration over the set is in progress, the results of the iteration are undefined. (except through the iterator's own remove operation) 话又说回来, 如果在 value 已知的状况下 Collection c = hashmap.values(); c.remove(target); 好像才是最快最方便的? -- ╔═ ═╦╦═════╦═════╗ ◤◤◤ ╠╣飞鸟ももこ╠═╗ ║ ║╚═════╝ ╚═╦═╣ ║╔══════╗╔═╩═╣ █◤ ╠╣Momoko Asuka╠╝ ║ ◣◢◣◢╩╩══════╩════╝ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.115.236.39
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1543809051.A.A05.html ※ 编辑: gasbomb (140.115.236.39), 12/03/2018 12:23:02
6F:→ qrtt1: Iterator 没事是因为你目前是单一 thread 12/03 13:02
7F:→ adrianshum: Concurrent modification exception 单thread 也会出 12/04 10:22
8F:→ adrianshum: 现 12/04 10:22
9F:推 alan23273850: learned a lesson! 12/12 09:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP