Java集合精选常见面试题(12)

Iteratorremove/add方法
这就导致 Iterator 莫名其妙地发现自己有元素被 remove/add ,然后,它就会抛出一个 ConcurrentModificationException 来提示用户发生了并发修改异常 。这就是单线程状态下产生的 fail-fast 机制 。

fail-fast 机制 :多个线程对 fail-fast 集合进行修改的时候 , 可能会抛出ConcurrentModificationException 。即使是单线程下也有可能会出现这种情况,上面已经提到过 。
Java8 开始,可以使用 Collection#removeIf()方法删除满足特定条件的元素 , 如
List<Integer> list = new ArrayList<>();for (int i = 1; i <= 10; ++i) {list.add(i);}list.removeIf(filter -> filter % 2 == 0); /* 删除list中的所有偶数 */System.out.println(list); /* [1,3, 5 ,  7,9] */除了上面介绍的直接使用 Iterator 进行遍历操作之外,你还可以:
  • 使用普通的 for 循环
  • 使用 fail-safe 的集合类 。java.util包下面的所有的集合类都是 fail-fast 的 , 而java.util.concurrent包下面的所有的类都是 fail-safe 的 。
4. 集合去重《阿里巴巴 Java 开发手册》的描述如下:
可以利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作 , 避免使用 Listcontains() 进行遍历去重或者判断包含操作 。
这里我们以 HashSetArrayList 为例说明 。

推荐阅读