迭代器-實現邊循環邊刪除

需求:對集合數據進行整理,有時需要便循環邊刪除一些無用的信息

    實現過程中,使用for循環與foreach會出現異常下標溢出。是因爲使用上述兩者會改變集合長度。

    此時你可能會想新建一個集合用來存儲,此舉大可不必。用迭代器解決即可。

    例如以下代碼: 刪除集合中的偶數

    

List<Integer> lst = new ArrayList<Integer>();
lst.add(1);
lst.add(2);
lst.add(3);
lst.add(4);
lst.add(5);
lst.add(6);

Iterator<Integer> it = lst.iterator();
	while (it.hasNext()) {
		int value = it.next();
        System.out.println(value);
        if(value%2==0){
           it.remove();
        }
	}
System.out.println("----------------------------");
System.out.println(lst.size());

    

擴展

Iterator 和 ListIterator 區別?

Iterator 可以遍歷 Set 和 List 集合,而 ListIterator 只能遍歷 List。

Iterator 只能單向遍歷,而 ListIterator 可以雙向遍歷(向前/後遍歷)。

ListIterator 實現 Iterator 接口,然後添加了一些額外的功能,比如添加一個元素、替換一個元素、獲取前面或後面元素的索引位置。

  例如以下代碼:

  ArrayList<Integer> lst = new ArrayList<Integer>();
        
	    lst.add(1);
	    lst.add(2);
	    lst.add(3);
	    lst.add(4);
	    lst.add(5);
	    lst.add(6);

	    ListIterator<Integer> it = lst.listIterator();
	    
	    System.out.println("====================從前遍歷========================");
	    while(it.hasNext()) {
	    	System.out.println(it.next());
	    }
	    
	    System.out.println("====================從後遍歷========================");
	    while(it.hasPrevious()) {
	    	System.out.println(it.previous());
	    }
	   
	    System.out.println("====================指定位置向前遍歷========================");
	    it = lst.listIterator(4);
	    while(it.hasPrevious()){
	     System.out.println(it.previous());
	    }
	    
        //替換方法
	    while(it.hasNext()) {
	    	Integer value = it.next()+10;
	    	it.set(value);
	    }
	    System.out.println("====================替換後的值========================");
	    for (Integer str : lst) {
	      System.out.println(str);
	    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章