Java list中remove
阿新 • • 發佈:2021-01-12
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()); } }