最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ArrayList在for循環(huán)中使用remove方法移除元素方法介紹

 更新時(shí)間:2017年09月30日 09:15:00   作者:性子有點(diǎn)污  
這篇文章主要介紹了ArrayList在for循環(huán)中使用remove方法移除元素的內(nèi)容,介紹了具體代碼實(shí)現(xiàn),需要的朋友可以參考下。

有時(shí)候我們需要在一個(gè)ArrayList的for循環(huán)中動(dòng)態(tài)刪除元素的需求, 廢話不多說看代碼

List<Integer> list = new ArrayList<Integer>(); 
list.add(0); 
list.add(1); 
list.add(2); 
list.add(3); 
list.add(4); 
list.add(5); 
list.add(6); 
list.add(7); 
//正常循環(huán) 
for (int i = 0; i < list.size(); i++) { 
 System.out.println("i的值:" + i + " 對(duì)應(yīng)的數(shù)字:" + list.get(i)); 
} 
System.out.println("沒有remove前l(fā)ist的項(xiàng):"+list.size()); 
//邊循環(huán)邊刪除 
for (int i = 0; i < list.size(); i++) { 
 System.out.println("i的值:" + i + " 對(duì)應(yīng)的數(shù)字:" + list.get(i)); 
 if(list.get(i) == 3) list.remove(list.get(i));//刪除list的第四項(xiàng) 
} 
System.out.println("remove后list的項(xiàng):"+list.size()); 
System.out.println("==========remove后的list=========="); 
for (int i = 0; i < list.size(); i++) { 
 System.out.println("i的值:" + i + " 對(duì)應(yīng)的數(shù)字:" + list.get(i)); 
} 

執(zhí)行代碼, 結(jié)果如下:

i的值:0 對(duì)應(yīng)的數(shù)字:0 
i的值:1 對(duì)應(yīng)的數(shù)字:1 
i的值:2 對(duì)應(yīng)的數(shù)字:2 
i的值:3 對(duì)應(yīng)的數(shù)字:3 
i的值:4 對(duì)應(yīng)的數(shù)字:4 
i的值:5 對(duì)應(yīng)的數(shù)字:5 
i的值:6 對(duì)應(yīng)的數(shù)字:6 
i的值:7 對(duì)應(yīng)的數(shù)字:7 
沒有remove前l(fā)ist的項(xiàng):8 
i的值:0 對(duì)應(yīng)的數(shù)字:0 
i的值:1 對(duì)應(yīng)的數(shù)字:1 
i的值:2 對(duì)應(yīng)的數(shù)字:2 
i的值:3 對(duì)應(yīng)的數(shù)字:3 
i的值:4 對(duì)應(yīng)的數(shù)字:5 
i的值:5 對(duì)應(yīng)的數(shù)字:6 
i的值:6 對(duì)應(yīng)的數(shù)字:7 
remove后list的項(xiàng):7 
==========remove后的list========== 
i的值:0 對(duì)應(yīng)的數(shù)字:0 
i的值:1 對(duì)應(yīng)的數(shù)字:1 
i的值:2 對(duì)應(yīng)的數(shù)字:2 
i的值:3 對(duì)應(yīng)的數(shù)字:4 
i的值:4 對(duì)應(yīng)的數(shù)字:5 
i的值:5 對(duì)應(yīng)的數(shù)字:6 
i的值:6 對(duì)應(yīng)的數(shù)字:7 

可以看到?jīng)]有刪除前, 我們的list的項(xiàng)和循環(huán)對(duì)應(yīng)的數(shù)字都是正確的, 但是下面的循環(huán)在刪除第4個(gè)元素后,第4,5,6個(gè)項(xiàng)對(duì)應(yīng)的數(shù)字本應(yīng)該是4,5,6, 但是這里卻變成了5,6,7.

原因是,我們刪除第4項(xiàng)后,list的長度就變成7,而且,list會(huì)把第4項(xiàng)后面的值往前移一位, 也就是說,i=3時(shí),list.get(i)=4,i=4時(shí),list.get(i)=5,i=5時(shí),list.get(i)=6,i=6時(shí),list.get(i)=7..  我們再說的形象一點(diǎn), 就是本來有8層糕點(diǎn),依次是0-7,豎起來,大的在上,小的在下,我們從下往上數(shù),數(shù)到第5個(gè)的時(shí)候,吃掉這一層糕點(diǎn),這時(shí),上面三層分別往下移了一層
所以, 值為4的項(xiàng)我們根本沒有循環(huán)到

那有什么方法可以實(shí)現(xiàn)remove呢, 有個(gè)笨方法,是新建一個(gè)tempList, 把要?jiǎng)h除的項(xiàng)全部add進(jìn)去,最后用list.removeAll(tempList)實(shí)現(xiàn) . 但是這里我們有更好的方法, 就是倒序刪除

還是上面的例子, 我們看代碼:

List<Integer> list = new ArrayList<Integer>(); 
list.add(0); 
list.add(1); 
list.add(2); 
list.add(3); 
list.add(4); 
list.add(5); 
list.add(6); 
list.add(7); 
//正常循環(huán) 
for (int i = 0; i < list.size(); i++) { 
 System.out.println("i的值:" + i + " 對(duì)應(yīng)的數(shù)字:" + list.get(i)); 
} 
System.out.println("沒有remove前l(fā)ist的項(xiàng):"+list.size()); 
 
//邊循環(huán)邊刪除 
for (int i = list.size() -1 ; i >= 0; i--) { 
 System.out.println("i的值 " + i + " 對(duì)應(yīng)的數(shù)字 " + list.get(i)); 
 if(list.get(i) == 3) list.remove(list.get(i)); 
} 
System.out.println("remove后list的項(xiàng):"+list.size()); 
 
System.out.println("==========remove后的list=========="); 
for (int i = 0; i < list.size(); i++) { 
 System.out.println("i的值 " + i + " 對(duì)應(yīng)的數(shù)字 " + list.get(i)); 
} 

執(zhí)行代碼,結(jié)果如下:

i的值:0 對(duì)應(yīng)的數(shù)字:0 
i的值:1 對(duì)應(yīng)的數(shù)字:1 
i的值:2 對(duì)應(yīng)的數(shù)字:2 
i的值:3 對(duì)應(yīng)的數(shù)字:3 
i的值:4 對(duì)應(yīng)的數(shù)字:4 
i的值:5 對(duì)應(yīng)的數(shù)字:5 
i的值:6 對(duì)應(yīng)的數(shù)字:6 
i的值:7 對(duì)應(yīng)的數(shù)字:7 
沒有remove前l(fā)ist的項(xiàng):8 
i的值 7 對(duì)應(yīng)的數(shù)字 7 
i的值 6 對(duì)應(yīng)的數(shù)字 6 
i的值 5 對(duì)應(yīng)的數(shù)字 5 
i的值 4 對(duì)應(yīng)的數(shù)字 4 
i的值 3 對(duì)應(yīng)的數(shù)字 3 
i的值 2 對(duì)應(yīng)的數(shù)字 2 
i的值 1 對(duì)應(yīng)的數(shù)字 1 
i的值 0 對(duì)應(yīng)的數(shù)字 0 
remove后list的項(xiàng):7 
==========remove后的list========== 
i的值 0 對(duì)應(yīng)的數(shù)字 0 
i的值 1 對(duì)應(yīng)的數(shù)字 1 
i的值 2 對(duì)應(yīng)的數(shù)字 2 
i的值 3 對(duì)應(yīng)的數(shù)字 4 
i的值 4 對(duì)應(yīng)的數(shù)字 5 
i的值 5 對(duì)應(yīng)的數(shù)字 6 
i的值 6 對(duì)應(yīng)的數(shù)字 7 

我們可以看到變循環(huán)變刪除,并不影響后面的元素, remove后的list也和第一次的結(jié)果是一樣的 . 這是因?yàn)槲覀儎h除list元素,list的長度是會(huì)變小, 但是變化的只是比當(dāng)前被刪除元素的項(xiàng)大的項(xiàng), 而我們這里使用倒序循環(huán), 大的項(xiàng), 我們已經(jīng)執(zhí)行過了, 所以不會(huì)影響.. 再用上面的比喻來說明,這次我們是從上往下數(shù),數(shù)到第4個(gè)的時(shí)候,吃掉這一層糕點(diǎn),這時(shí),上面三層分別往下移了一層 , 但是這不影響我們之前數(shù)過的蛋糕, 而且對(duì)下面的蛋糕也不影響, 這就是原理

總結(jié)

以上就是本文關(guān)于ArrayList在for循環(huán)中使用remove方法移除元素方法介紹的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以參閱:Java實(shí)現(xiàn)跳躍表(skiplist)的簡單實(shí)例   Java多線程ForkJoinPool實(shí)例詳解  等。感謝朋友們對(duì)腳本之家網(wǎng)站的支持。有什么問題或者想要了解的可以隨時(shí)給我們留言,小編會(huì)及時(shí)回復(fù)大家的。

相關(guān)文章

  • SpringBoot中使用Redis的完整實(shí)例

    SpringBoot中使用Redis的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于SpringBoot中使用Redis的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springboot如何通過URL方式訪問外部資源

    springboot如何通過URL方式訪問外部資源

    這篇文章主要介紹了springboot如何通過URL方式訪問外部資源,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中雙重檢查鎖(double checked locking)的正確實(shí)現(xiàn)

    Java中雙重檢查鎖(double checked locking)的正確實(shí)現(xiàn)

    雙重檢查鎖(Double-Check Locking),顧名思義,通過兩次檢查,并基于加鎖機(jī)制,實(shí)現(xiàn)某個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Java中雙重檢查鎖(double checked locking)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • SpringBoot-JPA刪除不成功,只執(zhí)行了查詢語句問題

    SpringBoot-JPA刪除不成功,只執(zhí)行了查詢語句問題

    這篇文章主要介紹了SpringBoot-JPA刪除不成功,只執(zhí)行了查詢語句問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 爬蟲詳解及簡單實(shí)例

    java 爬蟲詳解及簡單實(shí)例

    這篇文章主要介紹了java 爬蟲詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java字符串的壓縮與解壓縮的兩種方法

    Java字符串的壓縮與解壓縮的兩種方法

    這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java對(duì)敏感數(shù)據(jù)進(jìn)行加密的方法詳解

    Java對(duì)敏感數(shù)據(jù)進(jìn)行加密的方法詳解

    敏感數(shù)據(jù)的加密是數(shù)據(jù)安全的重要方面,尤其是對(duì)于手機(jī)號(hào)和身份證號(hào)這類個(gè)人信息,本文主要為大家介紹了Java對(duì)敏感數(shù)據(jù)進(jìn)行加密的相關(guān)方法,希望對(duì)大家有所幫助
    2024-03-03
  • Java BigInteger類,BigDecimal類,Date類,DateFormat類及Calendar類用法示例

    Java BigInteger類,BigDecimal類,Date類,DateFormat類及Calendar類用法示例

    這篇文章主要介紹了Java BigInteger類,BigDecimal類,Date類,DateFormat類及Calendar類用法,結(jié)合實(shí)例形式詳細(xì)分析了Java使用BigInteger類,BigDecimal類,Date類,DateFormat類及Calendar類進(jìn)行數(shù)值運(yùn)算與日期運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • springboot AutoConfigureAfter控制Bean的注入順序方法詳解

    springboot AutoConfigureAfter控制Bean的注入順序方法詳解

    這個(gè)文章主要介紹一下@AutoConfigureAfter在spring框架中的作用,在使用過程中,很多開發(fā)人員在使用它的時(shí)候都出現(xiàn)了問題,問題比較多的就是它們的注冊順序總不是我們預(yù)期的,下面介紹一下正常的使用方法,感興趣的朋友一起看看吧
    2024-05-05
  • 聊聊SpringBoot的@Scheduled的并發(fā)問題

    聊聊SpringBoot的@Scheduled的并發(fā)問題

    這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

原平市| 大名县| 清原| 中江县| 蓬溪县| 虞城县| 西城区| 清水县| 讷河市| 本溪市| 镇江市| 宝丰县| 金溪县| 铜鼓县| 云南省| 泸定县| 额尔古纳市| 正镶白旗| 东乡县| 博兴县| 梁平县| 工布江达县| 鹿泉市| 丰镇市| 育儿| 皮山县| 明水县| 贵阳市| 香港| 信宜市| 巴青县| 洛川县| 安义县| 开阳县| 夏邑县| 平昌县| 错那县| 庄浪县| 无为县| 南丰县| 浑源县|