-
我在 Java 里用 subList 截了一段子列表想单独拿去处理、结果对子列表的改动竟然莫名其妙影响到了原列表,后来又遇到取完子列表往原列表里加了个元素再用那个子列表时直接抛 ConcurrentModificationException,折腾很久才搞懂 subList 返回的根本不是拷贝而是原列表的一个视图的深度复盘
我有个大列表想取其中一段单独处理,很自然写 List sub = list.subList(1, 4),以为 sub 是独立子列表、对它怎么折腾都不影响原 list,然后对 sub 改了元素、或 sub.clear()。结果两件怪事:一是只动了 sub 可 list 里对应那段也跟着变了——sub.clear() 把 list 第 1~4 个元素一起删了;二是先取了 sub 再往 list add…- 0
- 0
-
我在 Java 里用 Arrays.asList 把数组转成 List,以为得到了一个普通的可增删的列表,结果往里 add 一个元素就抛 UnsupportedOperationException,因为它根本不是 ArrayList 而是个固定大小的数组视图的深度复盘
我想把数组转成 List 后做些增删,顺手写了 List list = Arrays.asList("a","b","c"),然后 list.add("d")——Arrays.asList 返回 List、List 当然能 add,多自然。结果一运行就崩:UnsupportedOperationException,栈指…- 0
- 0
-
一段在 for-each 循环里直接 remove 元素的 Java 代码,跑起来就抛 ConcurrentModificationException,我和快速失败机制正面撞上了:一次集合遍历删除的深度复盘
一段单线程的 for-each 遍历 ArrayList、在循环里 remove 满足条件的元素,一运行就抛 ConcurrentModificationException——可明明是单线程,哪来的并发?根因是增强 for 底层用迭代器遍历,迭代器有 fail-fast 机制:记录集合的 modCount,每步检查它有没有被改;而 list.remove 绕过迭代器直接改集合让 modCount …- 0
- 0
ArrayList
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



