手写代码:ArrayList

2023-08-09 21:00:50 浏览数 (1)

1、创建、添加、tostring方法

具体增加方法:

代码语言:javascript复制
1、创建默认大小为10的数组
2、创建指定大小的数组
3、添加元素
4、打印数组内容

代码:

代码语言:javascript复制
public class MyArrayList<E> {
    private Object[] elementData;
    private int size;
    private static final int DEFALT_CAPACITY = 10;

    //    1、创建默认大小为10的数组
    public MyArrayList() {
        elementData = new Object[DEFALT_CAPACITY];
    }

    //    2、创建指定大小的数组
    public MyArrayList(int size_lenth) {
        elementData = new Object[size_lenth];
        size = size_lenth;
    }

    //   3、添加元素
    public void add(E element) {
        elementData[size  ] = element;
    }

    //    4、打印数组内容
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("[");
        for (int i = 0; i < size; i  ) {
            builder.append(elementData[i]   ",");
        }
        builder.setCharAt(builder.length() - 1, ']');
        return builder.toString();
    }
}

2、增加数组扩容

代码语言:javascript复制
//   3、添加元素
    public void add(E element) {
//        数组扩容
        if (size == elementData.length) {
            Object[] objects = new Object[elementData.length   (elementData.length >> 1)];
            System.arraycopy(elementData, 0, objects, 0, elementData.length);
            elementData = objects;
        }
        elementData[size  ] = element;

    }

3、set、get、数组越界检查

具体增加方法:

代码语言:javascript复制
5、set方法
6、get方法
7、索引越界检查

代码:

代码语言:javascript复制
//    5、set方法
    public void set(E e,int index){
        checkRange(index);
        elementData[index]=e;
    }

//    6、get方法
    public E get(int index){
        checkRange(index);
        return (E)elementData[index];
    }

//    7、索引越界检查
    public void checkRange(int index){
        if (index<0||index>size-1){
            throw new RuntimeException("索引不合法");
        }
    }

4、remove、size、isEmpty 具体增加加方法

代码语言:javascript复制
8、remove方法(根据元素)
9、remove方法(根据索引)
10、size方法
11、isEmpty方法

代码:

代码语言:javascript复制
//    8、remove方法(根据元素)
    public void remove(E element){
        for (int i = 0; i < elementData.length; i  ) {
            if (element.equals(get(i))){
                remove(i);
            }
        }
    }

//    9、remove方法(根据索引)
    public void remove(int index){
        int NumMoved=elementData.length-index-1;
        if (index>0){
            System.arraycopy(elementData,index 1,elementData,index,NumMoved);
        }
            elementData[--size]=null;
    }

//    10、size方法
    public int size(){
        return size;
    }

//    11、isEmpty方法
    public boolean isEmpty(){
        return size==0?true:false;
    }

5、最终完整版本

代码语言:javascript复制
public class MyArrayList<E> {
    private Object[] elementData;
    private int size;
    private static final int DEFALT_CAPACITY = 10;

//    1、创建默认大小为10的数组
    public MyArrayList() {
        elementData = new Object[DEFALT_CAPACITY];
    }

//    2、创建指定大小的数组
    public MyArrayList(int size_lenth) {
        elementData = new Object[size_lenth];
        size = size_lenth;
    }

//   3、添加元素
    public void add(E element) {
//        数组扩容
        if (size == elementData.length) {
            Object[] objects = new Object[elementData.length   (elementData.length >> 1)];
            System.arraycopy(elementData, 0, objects, 0, elementData.length);
            elementData = objects;
        }
        elementData[size  ] = element;

    }

//    4、打印数组内容
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("[");
        for (int i = 0; i < size; i  ) {
            builder.append(elementData[i]   ",");
        }
        builder.setCharAt(builder.length() - 1, ']');
        return builder.toString();
    }

//    5、set方法
    public void set(E e,int index){
        checkRange(index);
        elementData[index]=e;
    }

//    6、get方法
    public E get(int index){
        checkRange(index);
        return (E)elementData[index];
    }

//    7、索引越界检查
    public void checkRange(int index){
        if (index<0||index>size-1){
            throw new RuntimeException("索引不合法");
        }
    }

//    8、remove方法(根据元素)
    public void remove(E element){
        for (int i = 0; i < elementData.length; i  ) {
            if (element.equals(get(i))){
                remove(i);
            }
        }
    }

//    9、remove方法(根据索引)
    public void remove(int index){
        int NumMoved=elementData.length-index-1;
        if (index>0){
            System.arraycopy(elementData,index 1,elementData,index,NumMoved);
        }
            elementData[--size]=null;
    }

//    10、size方法
    public int size(){
        return size;
    }

//    11、isEmpty方法
    public boolean isEmpty(){
        return size==0?true:false;
    }
}

0 人点赞