• ArrrayList底层代码的实现


    一、定义变量

    首先要想实现该块代码,必须定义三个私有变量。

    private Object[] elementData;//该变量用来存储容器中元素的个数。
    private int size;//该变量表示当前容器已经存在的元素个数;
    private static finnal int FAULT_CAPACITY = 10;//默认当前容器允许存储的元素个数为10个。
    

    二、定义构造方法

    //其核心代码如下所示:

    public Test(int index){
            if(size<0){
               throw new RunTimeException('容器容量不能为负数!");
    }else if(size==0){
                elementData = new Object[FAULT_CAPACITY];
    }else{
                elementData = new Object[index];
          }
    }
    

    二、main主方法

    //其核心代码如下所示:

    public static void main(String[] args){
                  Test  t = new Test(2);
    }
    

    三、添加元素方法

    //其核心代码如下所示:

    public void add(E element){
                 if(size==elementData.length){
                        Object[] newArray = new Object[elementData.length+(elementData.length>>1)];
                        System.arraycopy(elementData,0,newArray,0,elementData.length);
                        elementData = newArray;
                }
                     elementData[size++]  = element;
    }
    

    四、判断索引是否合法方法

    //其核心代码如下所示:

    public void checkArrage(int index){
              if(index<0||index>size-1){
                      throw new RunTimeException("当前索引不合法!+index");
    }
    

    五、获得元素个数方法

    //其核心代码如下所示:

    public int size(){
                 return size;
    }
    

    六、判断容器是否为空方法

    //其核心代码如下所示:

    public boolean isEmpty(){
                  return size==0?true:false;
    }
    

    七、获得指定位置元素方法

    //其核心代码如下所示:

    public E get(int index){
                  checkArrage(index);
                  return (E)elementData[index];
    }
    

    八、移除元素方法

    //其核心代码如下所示:

    public void move(E element){
               for(int i=0;i<size;i++){
                      if(element.equals(get(i))){               
                }
          }
    }
    

    九、移除指定位置元素方法

    //其核心代码如下所示:

    public void move(int index){
                 checkArrage(index);
                int nummoved = size-index-1;
                if(nummoved>0){
                      System.arraycopy(elementData,index+1,elementData,index,nummoved){
                 }
                 elementData[--size] = null;
          }
    }
    

    十、设定方法

    //其核心代码如下所示:

    public void set(int index, E element){
                checkArrage(index);
                elementData[index] = element;
    }
    

    十一、字符转换方法

    //其核心代码如下所示:

    public String toString(){
                StringBulider sb = new StringBulider();
                sb.append('[');
                for(int i=0;i<size;i++){
                       sb.append(elementData[i]+",");
              }
               sb.setCharAt(sb.length()-1,']');
                return sb.toString();
    }
    

    PS:以上方法只需要在main方法里面调用就行。

  • 相关阅读:
    .net core 2.2, new Bitmap出错 The type initializer for 'Gdip' threw an exception
    瑞萨单片机学习笔记(待续)
    Linux-GitLab安装及汉化
    mysql5.7 ibtmp1文件过大
    #和$的区别
    RTP封装h264
    一个项目同时需要向两个地址推送
    git命令
    echart绘制进度条、仪表盘、各种样式的折线图、饼图、环形图、地图等
    前端在实现类似控制台命令行或者告警信息提示时,需要保持滚动条始终停留在最新的信息位置,也就是最底部
  • 原文地址:https://www.cnblogs.com/fcy1/p/10921385.html
Copyright © 2020-2023  润新知