java学习之—实现一个简单的ArrayList

Posted 花儿为何那样红

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习之—实现一个简单的ArrayList相关的知识,希望对你有一定的参考价值。

package thread1;

/**
 * 实现一个简单的ArrayList
 *
 * @Title: uminton
 */
public class SimpleArrayList<T> {

    //数组中元素的大小
    private Integer elementSize = 0;
    //创建SimpleArrayList时,数组的容量,默认为16
    private Integer arrayCapacity = 16;
    //当数组容量不够时,默认每次扩容的大小
    private static final Integer DEFUALT_EXPAND_SIZE = 16;
    //元素容器
    Object[] array = null;

    //无参数构造,设置默认容量
    public SimpleArrayList(){
        this(DEFUALT_EXPAND_SIZE);
    }

    /**
     * 有参数构造,创建容器,设置数组大小
     * @param arrayCapacity
     */
    public SimpleArrayList(Integer arrayCapacity){
        super();
        if(arrayCapacity < 0){
            throw new IllegalArgumentException("数组空间越界");
        }
        array = new Object[arrayCapacity];
        this.arrayCapacity = arrayCapacity;
    }

    /**
     * 插入一个新元素,如果数组可以放下,直接添加
     * 如果数组中放不下,扩容
     * @param v
     */
    public void add(T v){
        //如果数组可以放下,直接添加
        if(elementSize < arrayCapacity){
            array[elementSize++] = v;
        }else { //如果数组放不下,扩容后再添加
            arrayCapacity += DEFUALT_EXPAND_SIZE; //扩容
            System.out.println("数组放不下扩容:"+arrayCapacity);
            Object[] newArray = new Object[arrayCapacity];
            //创建新的数组
            System.arraycopy(array,0,newArray,0,array.length);
            //拷贝数据到新的数组
            array = newArray;
            //从新的数组赋值到原数组
            array[elementSize++] = v;//添加
        }
    }

    /**
     * 根据指定下标查找元素
     * @param index
     * @return
     */
    public T get(int index){
        if(index > elementSize-1 || index < 0){
            throw new ArrayIndexOutOfBoundsException(index);
        }
        return (T) array[index];
    }

    /**
     * 删除指定位置的元素,所有之后的元素需要前移
     * @param index
     */
    public void remove(int index){
        if(index > elementSize-1 || index < 0){
            throw new ArrayIndexOutOfBoundsException(index);
        }
        for (int i = index; i < elementSize-1; i++) {
            array[i] = array[i+1];  //覆盖前一个数据
        }
        elementSize--;
    }

    /**
     * 更新指定位置上的元素
     * @param index
     * @param t
     */
    public void update(int index,T t){
        if(index > elementSize-1 || index < 0){
            throw new ArrayIndexOutOfBoundsException(index);
        }
        array[index] = t;
    }

    /**
     * 返回array中元素的大小
     * @return
     */
    public Integer size(){
        return elementSize;
    }

    public Integer capacity(){
        return arrayCapacity;
    }

    public static void main(String[] args) {
        SimpleArrayList<Integer> list = new SimpleArrayList<>();
        //添加
        for (int i = 0; i < 20; i++) {
            list.add(i);
        }
        //遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+" ");
        }

        //删除index为10的元素
        list.remove(10);

        for (int i = 0; i < list.size(); i++) {
            System.out.println("index:"+i+";value:"+list.get(i));
        }

        System.out.println("size:" + list.size() + ",capacity:" + list.capacity());
    }

}

  

以上是关于java学习之—实现一个简单的ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

Java 集合类学习之ArrayList

Java学习之IO流四

Java多线程学习之synchronized总结

二. 集合学习之CopyOnWriteArrayList

java学习之Runnable, Callable, Future, FutureTask

java学习之xml