您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何動態刪除ArrayList中的元素,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
昨天一位項目組同事需要在ArrayList中刪除所有不等于指定值的元素,但是她弄了很久,發現總是刪得不完全。剛好我以前做過類似的功能,就告訴她是因為ArrayList刪除元素后長度變小了,元素的索引也會跟著改變,但是迭代的下標沒有跟著相應的改變的緣故。
將一些刪除方法做一些總結:
/** * 刪除Arraylist中值為"c"的元素 */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); //"c"在Arraylist不連續存儲 /* list.add("c"); list.add("a"); list.add("c"); list.add("b"); list.add("c"); list.add("d"); list.add("c"); */ //"c"在Arraylist有連續存儲 list.add("a"); list.add("c"); list.add("c"); list.add("b"); list.add("c"); list.add("c"); list.add("d"); list.add("c"); //刪除Arraylist中值為"c"的元素 //有可能不能全部刪除 //removeListElement1(list); //能夠正確刪除 //removeListElement2(list); //能夠正確刪除 //removeListElement3(list); } /** * 刪除list中值為"c"的元素 * * 這種方式: * * 當值為"c"的元素在Arraylist中不連續存儲的時候,是可以把值為"c"的元素全部刪掉 * * 但是當值為"c"的元素在Arraylist中有連續存儲的時候,就沒有把值為"c"的元素全部刪除 * 因為刪除了元素,Arraylist的長度變小了,索引也會改變,但是迭代的下標沒有跟著變小 */ public static void removeListElement1(List<String> list) { for(int i=0;i<list.size();i++) { if("c".equals(list.get(i))) { list.remove(i); } } } /** * 刪除Arraylist中值為"c"的元素 * * 這種方式: * * 不管值為"c"的元素在Arraylist中是否連續,都可以把值為"c"的元素全部刪除 */ public static void removeListElement2(List<String> list) { for(int i=0;i<list.size();i++) { if("c".equals(list.get(i))) { list.remove(i); --i;//刪除了元素,迭代的下標也跟著改變 } } } /** * 刪除Arraylist中值為"c"的元素 * * 這種方式: * * 不管值為"c"的元素在list中是否連續,都可以把值為"c"的元素全部刪除 * * 需保證沒有其他線程同時在修改 */ public static void removeListElement3(List<String> list) { Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String str = iterator.next(); if("c".equals(str)) { iterator.remove(); } } }
關于如何動態刪除ArrayList中的元素就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。