亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中for循環(huán)刪除集合陷阱

 更新時(shí)間:2015年05月10日 10:37:37   投稿:hebedich  
java中在增強(qiáng)for循環(huán)為什么不能增刪集合呢?一個(gè)循環(huán)迭代,跟集合的增刪改沒什么關(guān)系。修改集合不是for去做的。for只管循環(huán)迭代,你在循環(huán)里邊修改集合,改變集合的長(zhǎng)度,順序?qū)ρh(huán)都有影響

首先看下面的代碼:

import java.util.LinkedList;
import java.util.List;

public class DeleteCollection {
  
  public static void main(String[] args) {
    List<String> list = new LinkedList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("e");
    for(int i=0;i<list.size();i++){ //循環(huán)刪除集合中的元素
      list.remove(i);
    }
    System.out.println("還剩余的元素個(gè)數(shù):"+list.size());
  }
}

上述的代碼按照思路應(yīng)該是對(duì)的,輸出的結(jié)果也應(yīng)該是0

看下面實(shí)際輸出的結(jié)果:

還剩余的元素個(gè)數(shù):2

你也許會(huì)問為什么呢?因?yàn)榧系拇笮∈莿?dòng)態(tài)變化的,當(dāng)你刪除一個(gè)元素之后,元素中的序號(hào)又重新排列,原來第二個(gè)應(yīng)該刪除的元素現(xiàn)在排在了第一個(gè)元素的位置,真正刪除的卻是第三個(gè)元素,依次類推,刪除的是第一個(gè)、第三個(gè)、第五個(gè)、、、、如果在原來刪除的代碼中加入語句:System.out.println("即將刪除的元素:"+list.get(i));即可驗(yàn)證。

加入上述語句后輸出的結(jié)果:

即將刪除的元素:a
即將刪除的元素:c
即將刪除的元素:e
還剩余的元素個(gè)數(shù):2

解決辦法:

究其原因是因?yàn)槟阋獎(jiǎng)h除的元素往前面移動(dòng)了,而你的i保存的值依舊往后走,所以如果讓i不往后走,往前走一個(gè),即可刪除本來排在第二個(gè)位置的元素現(xiàn)在排在了第一個(gè)位置上的元素。

更改后的核心代碼:

  for(int i=0;i<list.size();i++){
      System.out.println("即將刪除的元素:"+list.get(i));
      list.remove(i);
      i--;
    }

結(jié)果:

即將刪除的元素:a
即將刪除的元素:b
即將刪除的元素:c
即將刪除的元素:d
即將刪除的元素:e
還剩余的元素個(gè)數(shù):0

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • JAVA調(diào)用JavaScript方法代碼示例

    JAVA調(diào)用JavaScript方法代碼示例

    之前在一次機(jī)緣巧合的情況下,需要時(shí)用JAVA執(zhí)行js方法,查閱了一些文檔,找到了相關(guān)解決方法,這里和大家分享一下,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用JavaScript方法的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解

    java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解

    這篇文章主要介紹了java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解,對(duì)常量池的好處以及基本類型的包裝類常量池等作了簡(jiǎn)要分析,有需要的朋友可以借鑒參考下
    2021-09-09
  • springboot整合mybatis-plus逆向工程的實(shí)現(xiàn)

    springboot整合mybatis-plus逆向工程的實(shí)現(xiàn)

    這篇文章主要介紹了springboot整合mybatis-plus逆向工程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java封裝及四種權(quán)限修飾符詳解

    java封裝及四種權(quán)限修飾符詳解

    這篇文章主要介紹了java封裝及四種權(quán)限修飾符詳解,對(duì)屬性進(jìn)行封裝,使用戶不能直接輸入數(shù)據(jù),我們需要避免用戶再使用"對(duì)象.屬性"的方式對(duì)屬性進(jìn)行賦值
    2022-08-08
  • SpringCloud Zuul在何種情況下使用Hystrix及問題小結(jié)

    SpringCloud Zuul在何種情況下使用Hystrix及問題小結(jié)

    這篇文章主要介紹了SpringCloud Zuul在何種情況下使用Hystrix 及問題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • springboot:接收date類型的參數(shù)方式

    springboot:接收date類型的參數(shù)方式

    這篇文章主要介紹了springboot:接收date類型的參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java多線程開啟的三種方式你知道嗎

    java多線程開啟的三種方式你知道嗎

    這篇文章主要為大家詳細(xì)介紹了java多線程開啟的三種方式,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2022-02-02
  • springboot+jsonp解決前端跨域問題小結(jié)

    springboot+jsonp解決前端跨域問題小結(jié)

    這篇文章主要介紹了springboot+jsonp解決前端跨域問題小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring Shell打Jar包時(shí)常用小技巧

    Spring Shell打Jar包時(shí)常用小技巧

    這篇文章主要介紹了Spring Shell打Jar包時(shí)常用小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java中繼承測(cè)試代碼分析

    java中繼承測(cè)試代碼分析

    這篇文章主要介紹了java中繼承測(cè)試代碼分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論