集合框架中的实现类-ArrayList

来源:互联网 发布:淘宝返利网站哪个最好 编辑:程序博客网 时间:2024/06/03 16:31

集合框架中的实现类-ArrayList

  1. ArrayList:我们可以将其看作是能够自动增长容量的数组;(file 1)
  2. 利用ArrayList的toArray()返回一个数组;(file 2)
  3. Array.asList()返回一个列表;(file 3)
  4. 迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素;(file 4)

## file 1 ##import java.util.*;class ALTest{    @SuppressWarnings("unchecked")    public static void main(String[] args){        ArrayList<String> al = new ArrayList<String>();        //<String>可以不要,也能编译过,不过会提出警告,网上说的是jdk1.5以前没有泛型这个概念//泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型;        al.add("zhangsan");        al.add("lisi");        al.add("wmz");        for(int i = 0;i < al.size(); i ++){            System.out.println(al.get(i));        }           }}// source code:可以从源码看看,不深入分析,太多了,Arrays.copyOf是创建了一个新的数组对象代替原来的数组;所以add方法的自动增长,不是原来的数组的基础上,而是重新创建;    public boolean add(E e) {        ensureCapacityInternal(size + 1);  // Increments modCount!! 用到了grow方法,最后调用了System.arraycopy        elementData[size++] = e;        return true;    }private void grow(int minCapacity) {        // overflow-conscious code        int oldCapacity = elementData.length;        int newCapacity = oldCapacity + (oldCapacity >> 1);        if (newCapacity - minCapacity < 0)            newCapacity = minCapacity;        if (newCapacity - MAX_ARRAY_SIZE > 0)            newCapacity = hugeCapacity(minCapacity);        // minCapacity is usually close to size, so this is a win:        elementData = Arrays.copyOf(elementData, newCapacity);    }public static short[] copyOf(short[] original, int newLength) {        // 该方法包含了所有的返回类型,这只是其中的一种类型;        short[] copy = new short[newLength];        System.arraycopy(original, 0, copy, 0,                         Math.min(original.length, newLength));        return copy;    }## file 2 ##import java.util.*;class ALTest{    public static void main(String[] args){             ArrayList al = new ArrayList();        al.add(new Point(3,3));        al.add(new Point(1,1));        al.add(new Point(2,2));        Object cl[] = al.toArray();/*source code:    public Object[] toArray() {        return Arrays.copyOf(elementData, size);    }*/        for(int i = 0 ;i < cl.length;i++){            System.out.println(cl[i]);        }           }}class Point{    int x , y;    Point(int x,int y){        this.x = x;        this.y = y;    }    public String toString(){        return "x="+x+"y="+y;    }}## file 3 ##import java.util.*;class ALTest{    public static void main(String[] args){             ArrayList al = new ArrayList();        al.add(new Point(3,3));        al.add(new Point(1,1));        al.add(new Point(2,2));        Object cl[] = al.toArray();             List l = Arrays.asList(cl);// @return a list view of the specified array        System.out.println(l);    }}class Point{    int x , y;    Point(int x,int y){        this.x = x;        this.y = y;    }    public String toString(){        return "x="+x+"y="+y;    }}## file 4 ##import java.util.*;class ALTest{       public static void main(String[] args){             ArrayList al = new ArrayList();        al.add(new Point(3,3));        al.add(new Point(1,1));        al.add(new Point(2,2));             // Iterator 是接口,而Collection这个接口中有定义Iterator而后ArrayList有实现这个接口;          Iterator i = al.iterator();        while(i.hasNext()){            System.out.println(i.next());        }    }}class Point{    int x , y;    Point(int x,int y){        this.x = x;        this.y = y;    }    public String toString(){        return "x="+x+"y="+y;    }}
0 0
原创粉丝点击