ArrayList 刪除指定值

2021-08-07 11:47:12 字數 1226 閱讀 7109

現在有這麼乙個需求,刪除陣列中值為1的項,這個問題看起來非常簡單,可實際上非常容易出錯,而且很有可能自己都沒發現,一般我們是這麼處理的:

初始化10萬條資料:

for (int i = 0; i

< 100000; i++)

刪除 =1 的項:

for (int i = 0; i < list.size(); i++) 

}

執行結果:

我們一看沒問題啊,我們以為已經解決了,如果我們刪除1和2的值,

if (list.get(i) == 1 || list.get(i) == 2)

}你會發現怎麼指刪除了10000條資料啊,怎麼和只刪除1的結果一樣啊,你的第一反應是不是**寫錯了,於是又看了看,沒錯啊,這個 時候我們就要好好分析下了:

資料集合:[0,1,2,3,4,5,6,7,8,9,0,1….]

第一步:i=0,list.get(i) =0,過。

第二步:i=1,list.get(i) =1,刪除當前項,

此時的資料集合變為:[0,2,3,4,5,6,7,8,9,0,1….]

第三步:i=2,list.get(i) =3,就是這看好了,由於刪除了一項導致列表發 生變化,使原資料的第三項跳過了。

到這裡我們已經明白為什麼出錯了,找到了原因解決起來也就比較簡單了我總結了幾個解決方法:

1、遞迴方法,就是每次刪除後重新開始:

private

void

delete1()}}

這種方法其實我不想介紹的,不過後來想想我們可以當成反面教材嘛,這種方法效率慘不忍睹,任何時候不到萬不得已千萬不要用遞迴。

2、根據出錯的分析我們可以在刪除時執行i–:

if (list.get(i) == 1 || list.get(i) == 2)

}3、倒敘執行:

if (list.get(i) == 1 || list.get(i) == 2)

}4、使用iterator

while (iterator.hasnext())

}使用2、3、4都可以達到我們想要的效果,從10萬條資料測試的效率來看都在800ms左右,不過我還是建議使用iterator。

ArrayList刪除偶數

最近去面試,面試官一直問arraylist和linkedlist的區別,然後問如果給你乙個arraylist集合,然後刪除掉其中的偶數,你會怎麼做,我當時想了沒想就說首先遍歷集合,然後判斷當前元素是否 是偶數,若是則呼叫remove方法。後來回來查詢了一下,其實可以通過add方法來替換remove方...

ArrayList的資料刪除

在開發的過程中發現arraylist移除不了乙個資料 直接說原因刪除目標的實體未實現equals方法。正如如下 public class testremove class person public person string name public string getname public vo...

ArrayList中資料刪除

在迴圈arrayllist時,經常會遇到remove操作,那麼arraylist的remove的底層是怎麼做的?abstractlist中,有乙個屬性modcount,這個屬性是跟蹤list中資料被修改的次數,任何對list的add remove操作,都將導致modcount 在abstractli...