亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么再添加一個元素【如 al.add ("two");】反而沒有拋出 異常了?

為什么再添加一個元素【如 al.add ("two");】反而沒有拋出 異常了?

aluckdog 2023-03-31 18:14:54
測試當 List 下只有一個元素時,在 Iterator 遍歷過程中使用非 iterator.remove () 方式刪除public class HashMapTest {    public static void main(String[] args) {    ArrayList<String> al = new ArrayList<String>();    al.add("one");    System.out.println(al);    Iterator<String> it = al.iterator();    while (it.hasNext()) {        System.out.println(it.next());        al.remove("one");    }    }}運行結果:拋出 java.util.ConcurrentModificationException 異常------------------再添加一個元素【如 al.add ("two");】反而沒有拋出 java.util.ConcurrentModificationException 異常了。運行結果:[one, two]one-----------------真是奇怪?!
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

當使用Iterator來迭代訪問Collection集合時(ArrayList實現了Collection接口),Collection集合元素是不允許直接增刪的,要使用Iterator對象的it.remove()方法才行,否則就會拋出.ConcurrentModificationException異常

查看完整回答
反對 回復 2023-04-03
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

想遍歷又想刪除,你應該倒著來

		ArrayList<String> list = new ArrayList<String>();
		list.add("one");
		int n = list.size();
		for (int i = n - 1; i >= 0; i--)
		{
			if (list.get(i).equals("one"))
			{
				list.remove(i);
			}
		}
		System.out.println(list);


查看完整回答
反對 回復 2023-04-03
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

ArrayList在遍歷時刪除某個元素后需要立即break, 否則就會拋出這個異常。 

類的源碼木有看,可能是刪除后對象結構改變,而你還在以刪除前的結構遍歷輸出,刪除后對象長度改變,導致遍歷時數組越界引發異常,而在遍歷過程中添加元素是不會造成這個后果滴,它在過程當中也不會輸出來。


查看完整回答
反對 回復 2023-04-03
  • 3 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號