我們在使用Java集合的過程中有時需要對List進行刪除有以下幾種錯誤
使用了不可修改的集合無法刪除
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
Integer it = iterator.next();
if (it!=1){
iterator.remove();
}
}
System.out.println(list);
}
Arrays.asList生成的是隻讀的List無論怎麼樣也無法修改其元素
使用for循環刪除
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
System.out.println(list);
}
可以刪除, 但是刪除某個元素之後導致長度的改變會讓整體刪除異常。
這裏本來需要刪除所有元素,卻只是刪除了單數。
正確的使用就是要用迭代器來刪除 或者for循環後再對本索引刪除
Example.1
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (int i = 0; i < list.size(); i++) {
list.remove(i);
i--;
}
System.out.println(list);
}
Example.2
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
int g = iterator.next();
if (g!=2){
iterator.remove();
}
}
System.out.println(list);
但是 List並不是線程安全的,關於List的線程安全可以看下List線程安全