顺序表的实现(实现ArrayList)

1.顺序表的实现

使用数组实现ArrayList

代码

/*
*路人假helloWorld
*/
package com.cjj.sort;

import java.util.Arrays;

public class MyArrayList<T> {
    //存储元素的数组
    private T[] eles;

    public MyArrayList(){
        eles = (T[]) new Object[0];
    }

    //清空表
    public void clear(){
        eles = (T[])new Object[0];
    }

    //判断当前线性表是否为空表
    public boolean isEmpty(){
        if(eles.length == 0){
            return true;
        }else{
            return false;
        }
    }

    //获取线性表的长度
    public int length(){
        return eles.length;
    }

    //获取指定位置的元素
    public T get(int i){
        return eles[i];
    }

    //向线性表中添加元素
    public void add(T t){
        T[] newEles = (T[])new Object[eles.length+1];
        for (int i = 0; i < eles.length; i++){
            newEles[i] = eles[i];
        }
        newEles[newEles.length-1] = t;
        eles = newEles;
    }

    //在线性表指定位置插入元素
    public void insert(T t,int i){
        T[] newEles = (T[])new Object[eles.length+1];
        for (int j = 0; j < newEles.length; j++){
            //判断插入位置是否合理
            if (i < 0 || i > eles.length-1){
//                throw new RuntimeException("下标越界!");
                System.out.println("下标越界!");
            }else if (j < i){
                newEles[j] = eles[j];
            }else if (j == i){
                newEles[j] = t;
            }else{
                newEles[j] = eles[j-1];
            }
        }
        eles = newEles;
    }

    //删除指定i处的元素并返回改元素
    public T remove(int i){
        T result = eles[i];
        for (int j = i+1; j < eles.length; j++){
            eles[j - 1] = eles[j];
        }
        //将线性表长度减1
        T[] newEles = (T[])new Object[eles.length-1];
        for (int j = 0; j < newEles.length; j++){
            newEles[j] = eles[j];
        }
        eles = newEles;
        return result;
    }

    //查找元素第一次出现的位置
    public int indexOf(T t){
        int i = -1;
        for (i = 0; i < eles.length; i++){
            if (t.equals(eles[i])){
                return i;
            }
        }
        return -1;
    }

    //打印线性表中的所有元素
    public void show(){
        System.out.println(Arrays.toString(eles));
    }
}

测试

package com.cjj.test;

import com.cjj.sort.MyArrayList;

public class TestMyArrayList {
    public static void main(String[] args) {
        MyArrayList<String>  arr1 = new MyArrayList<>();
        System.out.println(arr1.isEmpty());
        arr1.add("喜羊羊");
        arr1.add("美羊羊");
        arr1.add("懒羊羊");
        arr1.add("沸羊羊");
        arr1.add("灰太狼");
        System.out.println(arr1.isEmpty());

        arr1.show();
        System.out.println(arr1.length());
        System.out.println("获取指定位置的元素:" + arr1.get(3));
//        System.out.println("获取指定位置的元素" + arr1.get(-1));
//        System.out.println("获取指定位置的元素" + arr1.get(10));

        arr1.insert("红太狼",2);
        arr1.show();

        System.out.println(arr1.remove(1));
        arr1.show();

        System.out.println(arr1.indexOf("喜羊羊"));
        System.out.println(arr1.indexOf("喜羊"));

        arr1.clear();
        arr1.show();

    }
}

测试结果

posted @ 2022-03-15 23:01  路人假helloWorld  阅读(71)  评论(0)    收藏  举报