zoukankan      html  css  js  c++  java
  • 用Java实现自己的ArrayList

    利用自己对ArrayList的理解,重写了Java的ArrayList工具类,旨在理解源码的精髓:

    public class MyArrayList<T> {
        //成员变量 
        private Object a[];  //int型一维数组
        private int size; //数组的元素个数
        //构造器
        public MyArrayList() {
            a = new Object[0];
            this.size = a.length;
        }
        //获取容器中元素个数
        public int size() {
            return size;
        }
        //判断容器是否为空
        public boolean isEmpty(){
            if( this.size == 0 ){
                return true;
            }else{
                return false;
            }
        }
        /**
         * 功能: 添加元素
         * @param value 接收新元素
         */
        public void add( T value ){
            size++; //元素个数增加一
            Object[] temp = new Object[size];
            //将a数组的所有元素复制到temp
            System.arraycopy(a, 0, temp, 0, a.length);
            temp[size-1] = value;  //新元素放到最后面
            a = temp; //让a记住新数组。
        }
        /**
         * @function  删除元素
         * @param loc 元素的索引号
         * @return    是否删除成功
         */
        public boolean delete(int loc){
            if( loc < 0 || loc >= size ){
                return false;
            }else{
                size--; 
                Object[] temp = new Object[size];
                //loc之前的所有元素复制到temp中
                System.arraycopy(a, 0, temp, 0, loc);
                //loc之后的所有元素复制到temp中
                System.arraycopy(a, loc+1, temp, loc, a.length-loc-1);
                a = temp;
                return true;
            }
        }
        /**
         * @function 修改指定位置上的元素值。
         * @param loc 位置编号
         * @param value 新值
         * @return 是否修改成功
         */
        public boolean set(int loc, T value ){
            if( loc < 0 || loc >= size ){
                return false;
            }else{
                a[loc] = value;
                return true;
            }
        }
        /**
         * @function 插入新元素
         * @param loc 插入的位置
         * @param value 新元素
         * @return 是否插入成功
         */
        public boolean insert(int loc, T value ){
            if( loc < 0 || loc > size ){
                return false;
            }else if( loc == size ){
                this.add(value);
                return true;
            }else{
                size++;
                Object[] temp = new Object[size];
                //复制a的loc之前的所有元素
                System.arraycopy(a, 0, temp, 0, loc);
                //复制之后的
                System.arraycopy(a, loc, temp, loc+1, a.length-loc);
                //新元素入位
                temp[loc] = value;
                a = temp;
                return true;
            }
        }
        //以字符串方式反馈所有元素
        public String toString(){
            StringBuilder vs = new StringBuilder();
            vs.append("[");
            for(int i = 0; i < size-1;  i++ ){
                vs.append( a[i] ).append(", ");
            }
            if( size != 0 ){
                vs.append(a[size-1]).append("]");
            }else{
                vs.append("]");
            }
            return vs.toString();
        }
    }
  • 相关阅读:
    easyui-datagrid 编辑模式下保存数据,光标所在单元格无法保存。
    esayui datebox 系统日期之后禁止选择
    使用easy-TreeGrid完成角色权限设置;使用checkbox
    jquery easyui easyui-combobox 与easyui-textbox 取值赋值操作
    原生js table中点击操作按钮,获取相应行某列需要的值作为参数请求跳转
    excel 导出 兼容到ie (JavaScript)
    vue 路由导航重复跳转报错解决记录
    变量提升
    定时器轮播,轮播一次加载一张图;
    es7 es8 新加的特性。
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/6560372.html
Copyright © 2011-2022 走看看