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();
        }
    }
  • 相关阅读:
    浅析uitableview
    ios9和xcode7的适配问题
    uiviewContentMode的介绍 转载
    关于常见的加密算法浅析
    程序中发起电话呼叫
    单例实现方式以及类方法和实例方法
    windows下的git的安装教程
    上传github项目
    android 使用SurfaceView绘制一个简单动画控件
    android 自定义控件属性获取bitmap和drawable的绘制
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/6560372.html
Copyright © 2011-2022 走看看