• 用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();
        }
    }
  • 相关阅读:
    Unity3D Resources TextAsset 正文
    使用位操作
    Chapter 3 Protecting the Data(3):创建和使用数据库角色
    找呀志_ContentResolver操作ContentProvider数据
    c#委托实例化和调用语句
    有意练习--Rails RESTful(一)
    对于晚辈:阅读经典“乱搭”形成了自己的“制”
    Eclipse SDK构建J2EE开发环境
    7.oracle学习门户系列七---网络管理和配置
    netback于kthread遇到cpu affinity问题
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/6560372.html
Copyright © 2020-2023  润新知