1. 程式人生 > >集合遍歷中刪除行不行

集合遍歷中刪除行不行

package 演算法;

import java.util.ArrayList;
import java.util.List;

public class 集合遍歷中刪除行不行 {
    /**
     * 面試中會問到list遍歷能不能使用remove方法,下面就是遇到指定的數就刪除
     * 
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Integer> list=new ArrayList<Integer>();
        List<A> list2=new ArrayList<A>();
        list2.add(new A("111"));
        list2.add(new A("112"));
        list2.add(new A("113"));
        list2.add(new A("114"));
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(9);
        for (int i = 0; i < list2.size(); i++) {
            if(i==2){
                list2.remove(i);
            }
            System.out.println(i);
        }
        for (Integer integer : list) {
            if(integer==5){
                list.remove(integer);
            }
            System.out.println(integer);
        }
        //正常
//        for(int i=0;i<list.size();i++){
//            System.out.println("前:"+list.get(i));
//            if(list.get(i)==5){
//                list.remove(i);
//            }
//            System.out.println("後:"+list.get(i));
//        }
//        //把i<4,雖然長度都是4但是會報下表越界
//        for(int i=0;i<4;i++){
//            System.out.println("前:"+list.get(i));
//            if(list.get(i)==5){
//                list.remove(i);
//            }
//            System.out.println("後:"+list.get(i));
//        }
//        
//    //--------總結上面兩個可以得出,for(int i=0;i<list.size();i++)這種寫法每次遍歷都會重新計算list.size()的長度
//        
//        for(int i=0;i<list.size();i++){
//            System.out.println("前:"+list.get(i));
//            if(list.get(i)==9){
//                list.remove(i);
//            }
//            System.out.println("後:"+list.get(i));
//        }
    //--------總結當刪除的是最後一個元素時,後面一個輸出語句會報錯,因為是先刪除的,再次get(i)的i還是原先的長度,但是現在變短了。
        
    }
    
}
class A{
    public String aa;

    public A(String aa) {
        super();
        this.aa = aa;
    }
    
}