java集合迭代删除,一个很诡异的现象
无意看到一个很有趣的问题,和大家分享下。
	public void method1(){
		List<String> a = new java.util.ArrayList<String>();
		a.add("1");
		a.add("2");
		for (String temp : a) {
			if ("1".equals(temp)) {
		        a.remove(temp);
		    }
		}
	}
	public void method2(){
		List<String> a = new java.util.ArrayList<String>();
		a.add("1");
		a.add("2");
		for (String temp : a) {
			if ("2".equals(temp)) {
				a.remove(temp);
			}
		}
	}初看method1和method2,我觉得都会顺利执行(无异常),然而,现实却是method2抛出异常
为什么删除第一个时不会异常,删除第二个就会异常呢?debug源码了,才发现,原来删除第一个和删除第二个都出现了问题,只是删除元素2会更明显的抛出异常。
首先我们要知道,for循环,jvm会在编译后,翻译为iterator迭代器,即
删除第一个元素的情况
当删除第二个元素的情况
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号