1. 程式人生 > >java中foreach語句中使用remove時出現的問題

java中foreach語句中使用remove時出現的問題

先粘上測試程式碼:

public  class test {
    public static void main(String[] args) {
       List<Integer> list=new ArrayList<>();
       list.add(1);
       list.add(2);
       list.add(3);
       for(Integer i:list)
       {
           if(i.equals(1))
           {
               list.remove(i);
           }
       }
    }

}

跑出的結果:


分析:

實際上foreach語句內部實現是迭代器,不允許在此中刪除之後再次迭代

故若想遍歷並remove元素,不能採用迭代器或者是foreach語句,我猜想是因為我使用Iterator進行迭代的同時,移除了其中的物件,破壞了Iterator內部用來迭代的索引。所以丟擲異常。

如果使用普通的for迴圈,自己設定索引i 進行迴圈,就不會出現此問題

如下

public  class test {
    public static void main(String[] args) {
       List<Integer> list=new ArrayList<>();
       list.add(1);
       list.add(2);
       list.add(3);
       for(int i=0;i<list.size();i++)
       {
           if(list.get(i).equals(1))
           {
               list.remove(i);
           }
       }
       System.out.println(list);
    }

}

結果:

成功跑出我們想要的結果

相關推薦

javaforeach語句使用remove出現的問題

先粘上測試程式碼:public  class test {    public static void main(String[] args) {       List<Integer> list=new ArrayList<>();       li

java在寫入mysql資料庫出現的亂碼問題

1.亂碼問題一直都是程式設計當中的一個頭痛的地方,至少我是這麼認為的。所以我就記住了兩個常用的解決java中文亂碼問的語句, request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;

Eclipse執行Maven打包編譯出現:Perhaps you are running on a JRE rather than a JDK?

出現錯誤後,查看了許多網友的解決方式,但都沒有解決我遇到的問題,可能是情況還是有些許的不同;下面直接說說我的問題的解決辦法,希望對大家有所幫助;Eclipse中Maven報錯資訊如下: 本以為可能是Eclipse配置Maven沒配置好,或者是jdk和jre環境出現問題,後來在cmd視窗找到

關於PCL使用八叉樹出現無法解析的外部命令的錯誤*

關於PCL中使用八叉樹時出現無法解析的外部命令的錯誤 #前幾天在使用八叉樹的時候在編譯時總是出現無法解析的外部命令的錯誤 6 error LNK2001: 無法解析的外部符號 "protected: virtual bool __thiscall pcl::oc

vue引入本地swf檔案出現的路徑錯誤問題

    這幾天改一個老的政府專案。裡面用到了flash動畫,這個之前沒有接觸過,以為路徑就和普通的圖片引入一樣。 就這樣寫了: 但是這樣發現一個問題,就是在頁面上確實會顯示讓你啟用flash控制元件,但是點開後會發現一片空白。 一開始我以為是swf檔案的問題,但是在一個簡單的

C#foreach語句的迭代器實現機制

C#中的foreach語句可用於迴圈遍歷某個集合中的元素,而所有的只要支援了IEnumerable或IEnumerable<T>泛型介面的型別都是可以 用foreach遍歷的。其具體的遍歷實現過程就是利用C#中的迭代器中的方法來按照特定順序遍歷的。在.NET中I

MATLABimshow()函式處理影象出現全白顯示的原因

1、uint8(無符8位)與double     double函式只是將讀入影象的uint8資料轉換為double型別,一般不使用;常用的是im2double函式,將uint8影象轉為double型別,範圍為0-1,如果是255的影象,那麼255轉為1,0還是0,中間的做相

警惕 MySql 更新 sql 的 WHERE 從句的 IN() 子查詢出現的效能陷阱

mer_stage 表有 216423 條記錄,DDL:CREATE TABLE `mer_stage` ( `STAGE_ID` int(11) NOT NULL AUTO_INCREMENT, `MER_ID` int(11) NOT NULL, `MER_C

JSswitch語句做選擇為什麼可以不用break?

在JavaScript中,switch語句相比其他語言並沒有特殊之處。 在使用時,我們要注意每個分支後都應加一條break語句,否則後面的分支仍然會執行。實際程式中,我發現有時沒用break語句,仍然

(OK) Android Studio 3.2 建立新的AVD,出現錯誤(No space left on device)—— on Fedora 27

To install:- Google APIs Intel x86 Atom System Image (system-images;android-27;google_apis;x86)Preparing "Install Google APIs Intel x86 At

K8Spod在掛載volume出現FailedMount錯誤(exit status 32)

問題 先是在k8s中開啟了一個persistentvolume和persistentvolumeclaim,後端掛載NFS,然後在和volume相同的namespace中啟動一個pod掛載前面的persistentvolumeclaim。發現pod一直處於co

vsSQL Server建立連線出現與網路相關的或特定的例項的錯誤。未找到或無法訪問伺服器

一般遇到這種情況(app_data中新增不了資料庫,伺服器管理中也連線不了)    幾種解決方案試一下: 1.開啟SQL server 配置管理器,開啟SQL Server網路配置-->SQLEXPRESS協議,檢查Named Pipes 和TCP/IP 是否已啟

【Python】 關於Python 3.x,使用print函式出現的語法錯誤(SyntaxError: invalid syntax)的問題的原因

原文出處:http://blog.csdn.net/u010098331/article/details/52097845 【現象】 很多Python初學者,在安裝了最新版本的Python 3.x版本,比如Python 3.2之後, 去參考別人的程式碼(基於Pyt

應用程式嵌入的網頁執行出現“指令碼錯誤”解決方法

 CComPtr<IWebBrowser2> pWB2;  HRESULT hr;  hr = m_wndIE.QueryControl(&pWB2);  if (pWB2)  {   CComVariant v;   CComBSTR url(

處理vue使用Axios呼叫介面出現的ie資料處理問題

1.問題 近期在使用vue2 + axios 呼叫介面時碰到一個IE中很奇葩的問題,讓我頭痛了很久。 廢話不多扯,就是在其他瀏覽器中呼叫介面返回資料然後可以很順利的進行處理,但在IE(9-11)中發現

關於Python 3.x,使用print函式出現的語法錯誤(SyntaxError: invalid syntax)的問題的原因

【現象】 很多Python初學者,在安裝了最新版本的Python 3.x版本,比如Python 3.2之後, 去參考別人的程式碼(基於Python 2.x寫的教程),去利用print函式,列印輸出內容時,結果卻遇到print函式的語法錯誤: SyntaxError: invalid syntax

Java筆記——switch語句使用Enum注意點

當列舉型別用在switch語句中時,語法有一點點特別。看例子:/* * Copyright 2011 UDMS Project Zhejiang University */ package udms.core.utils; import sun.net.www.co

關於AndroidDialog show跟dismiss出現crash的解決辦法

        最近在做專案的時候,越來越多的開發者反饋SDK Dialog的show以及dismiss導致程式crash,出現的問題是傳遞進來的Activity被finish或者重建(橫豎屏切換)了。下面分別對這兩種情況說明以及解決辦法。 在Dialog.show時出現c

在Eclipse配置SDK路徑的出現找不到adb.exe的提示,解決方法如下!

SDK升級到1.6以上版本後在Eclipse中配置SDK路徑的時候出現找不到adb.exe的提示,原因:ADT外掛版本未升級導致 解決方法: ①不升級ADT版本(暫為0.9.9),把platform-tools資料夾下的adb.exe檔案拷貝到tools資料夾下,並把plat

關於虛擬機器VM的Linux啟動Nginx出現80埠被佔用問題的解決

我用的虛擬機器是VM,Linux版本是CentOS6.3。在安裝完Nginx之後,準備啟動Nginx服務。 切到目錄: [[email protected] ~]# cd /usr/local/nginx/sbin [[email protected