[鸿蒙PC命令行移植适配]移植rust三方库starship到鸿蒙PC的完整实践
2026/6/6 4:00:58
它们是 Java 集合在被遍历时,面对别人插队修改数据采取的两种完全相反的态度:
modCount)。只要有人增加或删除了元素,账本上的修改次数就会加 1。for-each兴高采烈地遍历元素,每走一步,都会对一下账本。如果突然发现账本数字变了(说明有人在暗中修改),它就会觉得“数据不安全了”,当场甩脸子抛出经典的ConcurrentModificationException异常。for循环里直接调用list.remove()删元素,这就是典型的“在遍历时改账本”,百分之百直接报错。CopyOnWriteArrayList、ConcurrentHashMap)这是面试和写代码最常遇到的场景,有三种正确姿势:
remove,改用迭代器自带的iterator.remove()。因为迭代器自己删的时候会主动把账本对齐,不会触发暴脾气。list.removeIf(e -> 条件),底层已经帮你封装好了安全机制。ArrayList换成CopyOnWriteArrayList。fail-fast账本不对就抛错,直接删除必着魔;
fail-safe 复制副本不报错,数据过期要记着。
单线程删找迭代(Iterator),多线程用并发包!