Java自身实现ArrayList

要实现ArrayList,首先理解ArrayList的底层数据结构是数组,是一个动态数组,其容量能够自动增长,据此特性来实现ArrayList。

实现代码:

public class MyArrayList<O>{

/**
 * 数组默认长度
 */
private static final int DEFAULT_SIZE = 10;

/**
 * 存储队列中的元素
 */
private Object[] elements = null;

/**
 *数组大小指针
 */
private int capacity;

/**
 * 当前游标
 */
private int current;
/**
 * 构造数组函数
 */
public MyArrayList(){
    this(10);
}
/**
 * 指定容量构造函数
 */
public MyArrayList(int size){
    if(size < 0){
        throw new RuntimeException("数组大小不能小于0");
    }else{
        this.elements = new Object[size];
        this.current = 0;
        capacity = size;
    }
}
/**
 * 获取指定位置数据
 */
public Object get(int index) {
    confirmIndex(index);
    return elements[index];
}
/**
 * 增加数据e
 */
public void add(O e) {
    confirmSize();
    this.elements[current] = e;
    this.current++;
}
/**
 * 删除指定下标数据
 */
public void remove(int index) {
    confirmIndex(index);
    for (int i = index; i < elements.length; i++) {
        if(i + 1 < elements.length){
            elements[i] = elements[i+1];
        }
    }
    current--;
}
/**
 * 确定位置插入数据e
 */
public void insert(int index,O e) {
    confirmIndex(index);
    for (int i = 0; i < elements.length; i++) {
        if(i >= index && i+2 < elements.length){
            elements[i] = e;
            elements[i+1] = elements[i+2];
        }
    }
    current++;
}
/**
 * 给定下标替换为val值
 */
public void set(int index,O val) {
    confirmIndex(index);
   @SuppressWarnings("unused")
    Object oldval = elements[index];
    elements[index] = val;

}
/**
 * 判断数组内是否包含val数据
 */
public boolean contains(Object val) {
    for (Object element : this.elements) {
        if(val.equals(element)){
            return true;
        }
    }
    return false;
}
/**
 * 获取数组大小
 */
public int size() {
    return this.current;
}
/**
 * 判断数组是否为空
 */
public boolean isEmpty() {
    if(this.current > 0){
        return false;
    }
    return true;
}

/**
 * 判断当前数组的容量是否满足,如果满足,则不操作,如果不满足,则增加空间
 */
private void confirmSize(){
    if(this.current == this.capacity){
        this.capacity = this.capacity + MyArrayList.DEFAULT_SIZE;
        Object[] newElemets = new Object[this.capacity];

        for (int i = 0; i < this.elements.length; i++) {
            newElemets[i] = this.elements[i];
        }

        this.elements = newElemets;
    }
}

/**
 * 判断下标是否越界
 */
private void confirmIndex(int index){
    if(index > capacity || index < 0){
        throw new RuntimeException("下标越界");
    }
}
/**
 * 打印数组数据
 */
public void show() {
    for (int i = 0; i < size() ; i++) {
        System.out.print(get(i)+" ");
    }
    System.out.println();
}

public static void main(String[] args) {

    MyArrayList<String> list = new MyArrayList<String>();

            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            list.remove(2);
            list.set(1,"k");
            list.show();
        }   
}

猜你喜欢

转载自blog.csdn.net/qq_41930448/article/details/81120821