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();
        }
    }
  • 相关阅读:
    Python的第一个程序
    Spring Boot 之Web开发
    JAVA简介及特性
    Spring Boot与Docker
    ls命令之通配符的使用
    [导入]ASP.NET常用函数
    [导入]再见号称中国最美的女人
    [导入]www.reactos.org一网友介绍的方向为“自己写操作系统的站点”
    [导入] Gmail Chat (Gmail 里的聊天功能)
    [导入]此篇写给城里普通收入的年轻人~~~
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/6560372.html
Copyright © 2011-2022 走看看