How to remove elements in a collection
前不久在微信公众号中看到一篇技术文章,内容是讨论“java中如何删除一个集合的多个元素”。 文章并没有把这个问题挖深,它的结论是,如果直接使用ArrayList,然后用forEach两层循环遍历,会报ConcurrentModificationException,尽管测试代码时单线程。原因是java的forEach使用iterator实现的循环遍历,而iterator在遍历的过程中是不允许删除元素的。也不能用传统for循环,因为使用for循环删除元素的过程中,数组下标有变动。 以上是文章的结论,现在呢,到底“删除集合的的多个元素”哪家强? 结论: 最简单的就是removeAll() 可以使用CopyOnWriteArrayList 我的测试代码: public class RemoveElementsInList { public void remove1(List<Integer> all, List<Integer> sub) { for (int i = 0; i < all.size(); i ++) { for (int j = 0; j < sub.size(); j ++) { if (all.get(i).equals(sub.get(j))) { all.remove(i); } } } System.out.println(all); } public static void main(String[] args) { List<Integer> sub = new ArrayList<>(Arrays.asList(1,2,3)); List<Integer> all = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7)); all.removeAll(sub); List<Integer> sub1 = new CopyOnWriteArrayList<>(sub); List<Integer> all1 = new CopyOnWriteArrayList<>(all); RemoveElementsInList removeElementsInList = new RemoveElementsInList(); removeElementsInList....