1. 程式人生 > >兩種for迴圈的實質

兩種for迴圈的實質

第一種:實質上就是一個迭代器, 在遍歷過程中修改元素值, 會報錯java.util.ConcurrentModificationException, 這是因為迭代器中有引數expectModCount:預期被修改的次數  來做併發安全的控制

HashSet<String> s = new HashSet<>();
		s.add("1");
		s.add("2");
		s.add("3");
		for(String ss:s) {
			System.out.println(ss);
			s.remove("1");
		}

第二種: 是通過索引的位置去獲取元素值, 會報錯java.lang.IndexOutOfBoundsException
ArrayList<String> ss = new ArrayList<>();
		ss.add("1");
		ss.add("2");
		ss.add("3");
		
		for(int i=0;i<=1;i++) {
			System.out.println(ss.get(i));
			ss.remove(2);
		}

而改稱如下形式則不會報錯, 說明使用索引位置獲取元素的遍歷時, 是執行緒不安全的
ArrayList<String> ss = new ArrayList<>();
		ss.add("1");
		ss.add("2");
		ss.add("3");
		
		for(int i=0;i<=2;i++) {
			System.out.println(ss.get(i));
			ss.set(2, "6");
		}