zoukankan      html  css  js  c++  java
  • 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());
        }
    
    }
    

      

  • 相关阅读:
    Day09 约束
    Day08 数据处理
    Day07 创建和管理表
    Day06 子查询
    Appium学习_01(连接、apppackage名查询、appactivity名查询)
    我的读书方法
    Python自动化学习记录
    FineReport帆软报表学习积累
    ERP企业资源管理 详解
    Centos7学习记录
  • 原文地址:https://www.cnblogs.com/chancy/p/10000263.html
Copyright © 2011-2022 走看看