Java学习——手写超级数组

128 阅读1分钟

学习Java的过程中,用到数组时,总需要开始声明数组大小,后续也不能扩容,针对这个问题,可以自动扩容的超级数组就可以解决这个问题

全部源码

package com.SuperArray;

public class Array {
    private int [] element;
    private int capacity;
    private int size=0;


    public Array(){
        this(10);
    }
    public Array(int size){
        this.capacity=size;
        this.element=new int[size];
    }

    public void insertItem(int item){
        if(capacity-size<=5){
            this.capacity=capacity*2;
            int [] temp=new int [capacity];
            for(int i=0;i<size;i++){
                temp[i]=this.element[i];
            }
            temp[size]=item;
            this.element=temp;
            size++;
        }
        this.element[size]=item;
        size++;
    }
    public int getElement(int index){
        if(index>=size){
            return -1;
        }
        return this.element[index];
    }
    public void deleteItem(int index){
        for(int i=index;i<size;i++){
            this.element[i]=this.element[i+1];
        }
        size--;
    }
    public int arrayLength(){
        return this.size;
    }
}

封装一个类时,成员变量权限需要设置为private,防止使用者直接可以对成员变量进行修改,在这里,我们需要三个成员变量,分别去维护数组(element)、数组元素个数(size)、数组容量(capacity)

可以看出,我准备了两个构造函数,一个是默认构造函数(当没有参数传入时,默认起始容量为10),一个是有参构造函数,可以传入一个int值作为起始容量

public Array(){
    this(10);
}
public Array(int size){
    this.capacity=size;
    this.element=new int[size];
}

在构建类方法时,向数组中添加元素的方法最特殊,因为每一次的添加都需要判断是否自动扩容,我设置的是如果容量大小减去数组长度大小<=5时,自动扩容,扩容过程中,需要声明一个temp数组作为中转变量,将原先数组中的所有元素赋值到temp数组中后,再添加新元素,然后将element的指针指向temp数组。

向数组中删除元素时,我们只需要拿到需要删除元素的索引,然后将删除元素后的元素逐步向前移动一位,覆盖删除的元素,再让size--,即可完成删除