1. 程式人生 > 實用技巧 >Java list中remove

Java list中remove

Java list中remove

java list相關的操作:易錯點

  • 是在foreach迴圈list的時候,不能在迴圈體中用add與remove方法,不然會爆出非法修改錯誤
  • 在利用for 迴圈remove的時候,list中的元素會自動向前補齊,會導致元素沒有刪除完畢的問題,解決的方案主要有倒著遍歷以及遍歷一個之後修改i
import java.util.*;
class Solution{
	/**
	java list相關的操作:易錯點
	- 是在foreach迴圈list的時候,不能在迴圈體中用add與remove方法,不然會爆出非法修改錯誤
	- 在利用for 迴圈remove的時候,list中的元素會自動向前補齊,會導致元素沒有刪除完畢的問題,解決的方案主要有倒著遍歷以及遍歷一個之後修改i
	*/
	public static void main(String[] args) {
		ArrayList<Integer> arr = new ArrayList<>();
		int[] a = new int[]{0,1,2,3,4,5,6,7,8,9};
		for(int i:a) arr.add(i);
		/**
		for(int i:arr){
			System.out.println(i);
			// arr.add(9);
			// arr.remove(1);
		}
		*/
		/**
		出現最後的size不是0的原因是因為,remove之後,後面的元素會自動向前移,在i=i+1的時候,就越過了這個元素,也就是說沒有訪問這個元素
		*/
		System.out.println("tets 1 ,from 0 to n , before remove , the arr`s length is "+arr.size());
		for(int i = 0;i<arr.size();i++) arr.remove(i);
		System.out.println("test 1 , from 0 to n , after remove , the arr`s length is "+arr.size());
		/**
		解決這個問題,方法1:從n到0進行遍歷
		*/
		arr.clear();
		for(int i:a) arr.add(i);
		System.out.println("tets 2 ,from n to 0 , before remove , the arr`s length is "+arr.size());
		for(int i = arr.size() - 1;i>=0;i--) arr.remove(i);
		System.out.println("test 2 , from n to 0 , after remove , the arr`s length is "+arr.size());
		/**
		解決這個問題,方法2:每移除一個元素以後再把i移回來
		*/
		for(int i:a) arr.add(i);
		System.out.println("tets 3 ,modify i , before remove , the arr`s length is "+arr.size());
		for(int i = 0;i<arr.size();i++) {
			arr.remove(i);
			i-=1;
		}
		System.out.println("test 3 , modify i , , after remove , the arr`s length is "+arr.size());

		
	}
}