list集合

        **继承了Collection接口

        特点:有序,可重复

        常见实现类 ArrayList Vector LinkedList Stack     

     ArrayList

     public class ArrayList extends AbstractList
        implements List, RandomAccess, Cloneable, java.io.Serializable
        //实现了Serializable接口,所以它支持序列化,可以通过序列化传输
        //实现了RandomAccess接口,支持快速随机访问,就是通过下标序号进行快速访问
        //实现了Cloneable接口,支持被克隆
      //transient关键字修饰的变量无法被序列化,前提是该类必须实现接口Serializable
      private transient Object[] elementData;  //底层由数组实现
      private int size;//集合中包含的元素的数量,增加或者删除集合元素时修改这个值

       构造方法

  
      public ArrayList(int initialCapacity) {
         super();
           if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                 initialCapacity);
            //构造一个指定大小的数组
           this.elementData = new Object[initialCapacity];
         }
      //重载一个无参构造方法 
      public ArrayList() {  
         this(10);  //调用有参构造并设置默认容量为10
      }

      ArrayList的add方法

          public boolean add(E e) {
            ensureCapacityInternal(size + 1);//数组大小+1  
            elementData[size++] = e;//将新下标和参数对应
            return true;
          }
          //重载的add方法
          public void add(int index, E element) {
             rangeCheckForAdd(index); //检查参数index是否越界  
             ensureCapacityInternal(size + 1); 
             //拷贝了一个新数组赋值给自己 
             System.arraycopy(elementData,index,elementData,index + 1,
               size - index);
               elementData[index] = element;
               size++;//集合大小自增
          }
          
      拷贝方法       
    static void arraycopy(Object source, //原数组
                int beginIndex,// 从原数组开始复制的下标
                Object destination,// 新数组
                int destStartIndex, // 新数组开始粘贴的下标
                int length)     //复制长度

        addAll方法

        //将Collection c内的数据插入ArrayList中        
        public boolean addAll(Collection c) {
            Object[] a = c.toArray();//转换成对象数组
            int numNew = a.length;//记录对象数组长度
            ensureCapacityInternal(size + numNew);   
            System.arraycopy(a, 0, elementData, size, numNew);//拷贝数组
            size += numNew;//拓展集合的大小
            return numNew != 0;//根据对象数组的大小是否为零判断
        }
         //将Collection c中的数据插入到ArrayList的指定位置
         public boolean addAll(int index, Collection c) {
            rangeCheckForAdd(index);//检查添加元素的边界
            Object[] a = c.toArray();
            int numNew = a.length;
            ensureCapacityInternal(size + numNew);//拓展集合容量  
            int numMoved = size - index;//记录插入位置
            if (numMoved > 0)
               //先拷贝index + numNew以后的内容给自己
               System.arraycopy(elementData, 
                        index, elementData,
                        index + numNew,
                        numMoved);
                //再将index之前的内容拷贝进来
                System.arraycopy(a, 0, elementData, index, numNew);
                size += numNew;//拓展集合大小
                return numNew != 0;
          }