编写属于自己的ArrayList

众所周知,ArrayList是调整数组非常好用的类!那么Java本身是自带ArrayList类的,而且也很实用。但是,今天我们要自己编写一个ArrayList类并测试,来实现对于数组的操作!

1.代码。

import java.util.Arrays;

public class ArrayList2023<T> {
    T[] array;
    int rear;
    int DEFAULT_CAPACITY = 10;

    public ArrayList2023(int capacity) {
        if (capacity > 0) {
            this.array = (T[]) new Object[capacity];
        }
        else if (capacity < 0) {
            System.out.println("数组长度不能小于零,新建了默认长度的数组");
            this.array = (T[]) new Object[DEFAULT_CAPACITY];
        }
        else if(capacity == 0)
        {
            this.array = null;
        }
        else{
            throw new IllegalArgumentException("Tllegal Capaity: "+ capacity);
        }
        }
    public ArrayList2023(T[]array,int rear)
        {
            this.array = array;
            this.rear = rear;
        }
    public  void AddElement(T element){

        this.array[rear] = element;
        rear ++;
    }
    public void removeElement(int index){
        if(index < 0 || index > rear)
        {
          System.out.println("fault");
        }
        for(int i = index;i<rear;i++)
        {
            this.array[i] = this.array[i+1];
        }
        rear--;
    }
     public  void set(int index, T element){
         if(index<0 || index > rear) {
             return;
         }
         array[index] = element;

     }
     public T get (int index){
        if(index<0 || index > rear) {
            return null;
        }
         System.out.println(array[index]);
        return array[index];
     }
     public int size(){
        System.out.println("数组的长度为:" + rear);
        return rear;
     }
     public void isEmpty(){
        if(rear == 0){
            System.out.println("数组为空");
        }
        else{
            System.out.println("数组不为空");
        }
     }
    @Override
    public String toString(){
        String string = "";
        for(int i = 0;i<rear;i++)
        {
            string = string + array[i].toString()+"\n";
        }
        return string;

    }
    }

 

  这个代码包含了ArrayList类的基本操作,比如Add,Remove,get,set等方法。这些方法的实现属于“弱小”方法,虽有一定的容错率但容错率不是很高。相比于Java自带的”健壮“代码,还有发展的空间,但这个代码的测试效果还是喜人的!

2.测试代码

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayList2023Test {
    public static void main(String[] args) {
        String name,id, quit = "continue";
        Scanner scan = new Scanner(System.in);
        ArrayList2023 arrayList2023 = new ArrayList2023(28);
        Student student1 = new Student("厉害的" ,"王老师");
        arrayList2023.AddElement(student1);
        System.out.println(arrayList2023);
        while(! quit.equals("quit")){
            System.out.println("请输入学生的姓名学号: ");
            name = scan.nextLine();
            id = scan.nextLine();
            student1 = new Student(name,id);
            arrayList2023.AddElement(student1);
            System.out.println("继续还是退出?输入quit以退出,任意以继续");
            quit = scan.nextLine();
        }
        System.out.println(arrayList2023);
        System.out.println("请输入要删除同学的序号: ");
        int index = scan.nextInt();
        arrayList2023.removeElement(index);
        System.out.println("删除后的线性表的内容: ");
        System.out.println(arrayList2023);
        System.out.println("请输入要修改的同学的序号: ");
        index = scan.nextInt();
        System.out.println("请输入修改后的内容: ");
        String element;
        element = scan.nextLine();
        element = scan.nextLine();
        arrayList2023.set(index,element);
        System.out.println(arrayList2023);
        System.out.println("请输入要查找的同学的序号: ");
        index = scan.nextInt();
        arrayList2023.get(index);
        int length;
        length = arrayList2023.size();
        arrayList2023.isEmpty();
    }
}

测试效果:编写属于自己的ArrayList

 (此为数组为空时的效果)

编写属于自己的ArrayList

 (此为数组不为空时的测试效果)

这样,我们自己编写的ArrayList类就完成了!!!!!

 

遇到的问题:

编写一个类最大的问题是什么!?

是要熬大夜?是要写断手?是要秃头?是要起名字?

都不是!!!!!

编写一个类最大的问题在于思路!

学习Java的过程中很容易有这样的错觉:看着全会,写了不对。

在这次编写ArrayList类的过程中,我深刻意识到了什么才叫”理解“。在编写前,我看Java库中的源代码时,基本意思也是可以理解的,每一步的目的也好效果也好,感觉自己都已经明白了,然后兴冲冲的创建一个空类去编辑......然后就没有然后了

最后还是在课上老师写完示范方法后才写完整个类。

过程中也有着优化部分,比如规避输出中的很多“Null”。编写属于自己的ArrayList

还有就是要记住方法中“return”就是关门了!不能再添加新的指令,若想输出要这样写:

编写属于自己的ArrayList

 

 这些问题都是要有记忆的,下次需要注意!

总而言之,这次作业真的让我备受打击,觉得自己的Java学习太low了,,,不过我觉得现在开始做出调整也应该还是来的及的。希望自己以后可以有更多的“创新力”。

上一篇:设计循环队列


下一篇:2021/9/17(栈实现+中后缀表达式求值)