Java集合篇一:ArrayList

package com.test.collection;

/**
 * 自定义ArrayList容器
 * 
 * 1.实现原理:底层封装数组
 * 
 * 2.查询
 * LinkList 相较 ArrayList 查询效率低:
 * 由于LinkList底层存放元素的不是数组,不能直接通过索引进行获取,需要从头或者从尾逐一遍历索引节点对象。
 * ArrayList直接通过索引获取即可。
 * 
 * 3.删除、插入
 * linkList 相较ArrayList 插入、删除的效率高 
 * LinkList 直接打断前后的链接,链接到新对象即可;
 * 而ArrayList插入之后需要对后面的元素 进行整体移位
 *
 */
public class MyArrayList {

    private int size;
    private Object[] elementData;
    
    public MyArrayList(){
        this(10);
    }
    public MyArrayList(int initialCapacity){
        if(initialCapacity<0){
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        elementData=new Object[initialCapacity];
    }
    public void add(Object obj){
        ensureCapacity();
        elementData[size++]=obj;
    }
    
    public Object get(int index){
        rangeCheck(index);
        return elementData[index];
    }
    
    //下标越界检查
    private void rangeCheck(int index){
        if(index<0 || index>size){
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    public void ensureCapacity(){
        if(size>=elementData.length){//数组扩容
            Object[] newArray=new Object[size*2+1];
            System.arraycopy(elementData, 0, newArray, 0, elementData.length);
            elementData =newArray;
        }
    }
    public int size(){
        return size;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        MyArrayList list=new MyArrayList(3);
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        System.out.println(list.size);
    }

}
原文地址:https://www.cnblogs.com/brant/p/6231170.html