1.错误例子:
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内容,被删除元素后面的元素前移。
2.另一种思路:防止重复的数据加入List
list.contains(xxx);
注意:时间复杂度O(n)!