一個ArrayList對象,比如叫 al,
儅我在 al 中 add 進去1000個Object后,
al.size() = 1000
這個很好理解。
但是儅我把 al 中的Object 全部 remove 之後,
al.size() = 500 了。
就是 remove 操作以後,al 的 size 變小為原來的一半了。
看了一下 ArrayList 的remove 操作的源碼,未發現有對容量操作的痕跡。
懇請執教。

解决方案 »

  1.   

    首先,你全部remove以后,size 应该是0而不是500。另外,在remove的时候,size会减少的,在ArrayList中的remove源代码里可以看到:elementData[--size] = null; --这句话就是将size减一了~
      

  2.   

    我想你還是寫個小demo看看再説吧
      

  3.   

    ArrayList好比是动态的数组,随着插入对象的增加而变大,随著对象的移除而减小
      

  4.   

    import java.util.ArrayList;
    public class Test{
    public static void main(String[] args){
    ArrayList al = new ArrayList();
    for(int i = 0;i < 100;i++) {
    al.add(new Integer(i));
    }
    System.out.println(al.size());
    for(int i = 0;i < al.size();i++) {
    al.remove(al.get(i));
    }
    System.out.println(al.size());
    }
    }
      

  5.   

    看看这个就知道了:import java.util.*;class Test
    {
      public static void main(String[] args) 
      {
        ArrayList al = new ArrayList();
        for (int i=0 ;i < 10 ;i++ ) 
        {
          al.add(new Integer(i));
        }
        System.out.println(al.size());    int size = al.size();
        for (int j = 0 ;j < al.size() ;j++ ) 
        {
          for (int k = 0 ; k < al.size(); k++) 
          {
            System.out.println(al.get(k));
          }
          System.out.println("===================");      al.remove(j);    }
        System.out.println(al.size());
      }
    }remove的时候,ArrayList 的大小变化,而index却没有变,所以没有删掉。
    也就是说删的是别的元素。
    可以从后往前删
      

  6.   

    这样吧:
        int size = al.size();
        for (int j = 0 ;j < al.size() ;j++ ) 
        {
          al.remove(j);      // 删除以后看看ArrayList的元素,最后可以看到没有删的元素。
          for (int k = 0 ; k < al.size(); k++) 
          {
            System.out.println(al.get(k));
          }
          System.out.println("===================");        }
      

  7.   

    remove 只是將元素置成 null 了
      

  8.   

    搂主并没有 remove 掉。 remove 的时候,应该将下表从大到小:
    for( int i=al.size()-1; i>=0; i-- )
    {}因为你 remove 掉某一个以后,后边的元素就往前顶上,然后你下标又往后移了一个,因此有一半的元素没有 remove 掉。