Python 每日一记227>>>Java实现顺序表

特别注意重写 toString()中的Arrays.copyOf (arr,N)使用,特别是copyOf,这个方法就是复制arr的前N个元素,返回新的数组。

/**
 * 线性表之顺序表的创建
 * 以数组为基础,创建一个顺序表
 * 顺序表要实现的功能包括:
 * 1、指定容量,创建顺序表
 * 2、返回长度,即元素个数
 * 3、插入、删除元素
 * 4、根据索引获取元素
 * 5、根据元素获取索引
 * 6、判断是否为空
 */

import java.util.Arrays;

//<T>泛型表示支持任意类型
class SequenceList<T>{
//    成员变量,数组和元素个数
    private T[] arr;
    private int N;
//构造方法,传入容量初始化顺序表,
    public SequenceList(int capacity) {
        this.arr = (T[])new Object[capacity];
        //注意不能是this.arr =new T[capacity];,只能强转化
        //初始化元素个数为0
        this.N = 0;
    }

//    清除
    public void clear(){
        N=0;
    }

//    判断是否为空
    public boolean isEmpty(){
        return N==0;
    }

//    获取元素个数
    public int length(){
        return N;
    }

//    获取,根据索引获得元素
    public T get(int i){
        return arr[i];
    }
//  添加元素
    public void append(T t){
        arr[N++]=t;
        //或者
        //arr[N]=t;
        //N++
    }

//    在某个位置插入元素
    public void insert(int i,T t){
            //将i之后的元素后移一个位置
            for (int index=N;index>i;index--){
            arr[index]=arr[index-1];
            }
//          插入,插入要N++
            arr[i]=t;
            N++;  
    }

//    删除某个位置的元素并返回这个值
    public T remove(int i){
//        先保存这个元素
        T cunrrent=arr[i];
//         如果是删除的尾部的元素
        if(i==N-1){
            N--;
//     如果删除非尾部元素
        }else if(i<N-1){
                // 循环将这个元素的后一个元素往前移动一个位置
            for (int index=i;index<N-1;index++){
                arr[index]=arr[index+1];
            }
        // 同时N--
            N--;
        }
        return cunrrent;
    }

//    查找,返回某个值的索引
    public int indexOf(T t) {
        for (int i = 0; i < N; i++) {
            if (arr[i].equals(t)) {
                return i;
            }
        }
//        如果没找到就返回-1
        return -1;
    }

//    为了输出好理解,重写 toString()
    @Override
    public String toString() {
//         copyOf是复制arr的前N个元素,返回新的数组
        return Arrays.toString(Arrays.copyOf (arr,N));
    }
}


//测试
public class Test {
    public static void main(String[] args) {
//        创建一个顺序表,容量为4
        SequenceList<Object> list = new SequenceList<>(4);
//        添加元素元素
        list.append(1);
        list.append(2);
        list.append(3);
//        list.append(4);满了就不能再添加
        System.out.println("添加元素后的顺序表"+list);

//       返回元素个数
        int length1 = list.length();
        System.out.println("元素个数"+length1);

//        插入元素,如果满了就不能再插入
        list.insert(2, 100);
        System.out.println("在指定处插入元素100后的顺序表"+list);

//       删除元素
        Object remove = list.remove(1);
        System.out.println("删除指定索引处的元素是"+remove);
        System.out.println("删除元素后的顺序表"+list);

//     根据索引获得元素
        System.out.println("获取指定索引处的元素是"+list.get(0));
        
        // 返回某个值的索引
        System.out.println("指定元素对应的索引为"+list.indexOf(100));

//        清空
        list.clear();
        System.out.println("清空元素后的顺序表"+list);

//        是否为空
        System.out.println("判断是否为空"+list.isEmpty());

    }
}

结果:
在这里插入图片描述

发布了235 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44663675/article/details/105357808