错误例子:
List<Integer> list=new ArrayList<Integer>(); list.add(1); list.add(1); list.add(1); list.add(2); list.add(3); System.out.println(list); for(int i=0;i<list.size();i++){ for(int j=0;j<list.size();j++){ if(i<j){ if(list.get(i).equals(list.get(j))){ list.remove(j); } } } } System.out.println(list); }
输出结果
[1, 1, 1, 2, 3] [1, 1, 2, 3]
应修改为
List<Integer> list=new ArrayList<Integer>(); list.add(1); list.add(1); list.add(1); list.add(2); list.add(3); System.out.println(list); for(int i=0;i<list.size();i++){ for(int j=0;j<list.size();j++){ if(i<j){ if(list.get(i).equals(list.get(j))){ list.remove(j); j--; } } } } System.out.println(list); }
输出结果
[1, 1, 1, 2, 3] [1, 2, 3]
原因:
List的remove方法执行后,会立即改变List内容,被删除元素后面的元素前移。