Java集合使用 Iterator 刪除元素
這篇文章主要介紹了Java集合使用 Iterator 刪除元素,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
針對(duì)常見的數(shù)據(jù)集合,比如 ArrayList 列表,對(duì)其進(jìn)行遍歷,刪除其中符合條件的某個(gè)元素,使用 iterator 迭代器進(jìn)行迭代,代碼如下:
public class PracticeController { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i=0; i<10; i++){ list.add("Demrystv" + i); } Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ String str = iterator.next(); System.out.println(str); if (str.equals("Demrystv3")){ list.remove(str); } } } }
代碼運(yùn)行會(huì)報(bào)如下異常:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList$Itr.next(ArrayList.java:859) at com.jd.data.controller.practice.PracticeController.main(PracticeController.java:16) Demrystv0 Demrystv1 Demrystv2 Demrystv3
看了一下 iterator 的源碼,發(fā)現(xiàn)迭代器在調(diào)用next方法時(shí),會(huì)檢查列表是否被修改過,如果被修改過,就會(huì)拋出ConcurrentModificationException異常。因?yàn)镮terator 是工作在一個(gè)獨(dú)立的線程中,并且擁有一個(gè) mutex 鎖。因此 Iterator 在工作的時(shí)候是不允許被迭代的對(duì)象被改變的,所以不能在使用 iterator 進(jìn)行遍歷的同時(shí) list 移除這個(gè)元素。因此,可以使用 iterator 的remove 方法。修改后的代碼如下
public class PracticeController { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i=0; i<5; i++){ list.add("Demrystv" + i); } Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ String str = iterator.next(); System.out.println(str); if (str.equals("Demrystv3")){ iterator.remove(); } } System.out.println("======移除元素后======"); for (int j=0; j<list.size(); j++){ System.out.println(list.get(j)); } } }
運(yùn)行結(jié)果如下:
Demrystv0 Demrystv1 Demrystv2 Demrystv3 Demrystv4 ======移除元素====== Demrystv0 Demrystv1 Demrystv2 Demrystv4
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11MyBatis解決Update動(dòng)態(tài)SQL逗號(hào)的問題
這篇文章主要介紹了MyBatis解決Update動(dòng)態(tài)SQL逗號(hào)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Spring Security之LogoutSuccessHandler注銷成功操作方式
這篇文章主要介紹了Spring Security之LogoutSuccessHandler注銷成功操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08java返回json請(qǐng)求中文變成問號(hào)的問題及解決
這篇文章主要介紹了java返回json請(qǐng)求中文變成問號(hào)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07