Javaはシーケンステーブルを作成します(追加、削除、変更、チェック)

シーケンステーブルは、データ要素が連続した物理アドレスを持つストレージユニットのセグメントに順次格納される線形構造であり、通常、ストレージには配列が使用されます。アレイでの完全なデータの追加、削除、検索、および変更。

シーケンステーブルは、一般的に次のように分割できます。

a。静的シーケンステーブル:固定長の配列ストレージを使用する

b。動的シーケンステーブル:動的に開発されたアレイストレージを使用する

静的シーケンステーブルは、保存する必要のあるデータの量がわかっているシナリオに適しています。

静的シーケンステーブルの固定長配列により、Nが大きくなり、スペースが無駄になり、少ないだけでは不十分です。対照的に、動的シーケンステーブルはより柔軟で、スペースのサイズが動的に割り当てられます。必要に応じて。

コードは次のように表示されます。

import java.util.Arrays;

public class MyArray {

    private int[] data;
    private int size;
    // 存储元素仍然还在数组中存储
    public MyArray() {
        data = new int[10];
    }
    // 当前动态数组中实际存储的元素个数
    public MyArray(int dx) {
        data = new int[dx];
    }

    //1.增加元素
    //头插
    public void addFirst(int val){
        addIndex(0,val);
    }
    //尾插
    public void addLast(int val){
        addIndex(size,val);
    }
    //中间插值
    public void addIndex(int index,int val){
        //判断数组是否满
        if(size==data.length){
            grow();
        }
        //判断index是否合法
        if(index<0||index>size){
            System.out.println("add index illegal!");
            return;
        }
        else{
            //将index位置空出
            for (int i = size-1; i >= index; i--) {
                data[i+1]=data[i];
            }
            data[index]=val;
            size++;
        }
    }

    //2.查找元素
    //根据元素查找下标
    public int getValueIndex(int val){
        for (int i = 0; i < size; i++) {
            if(data[i]==val){
                return i;
            }
        }
        return -1;
    }
    //根据下标查找元素
    public int getIndexValue(int index){
        if(index<0||index>size){
            System.out.println("get index illegal!");
        }
        return data[index];
    }

    //3.改变元素
    public void change(int index,int val){
        if(index<0||index>size){
            System.out.println("get index illegal!");
        }
        data[index]=val;
    }

    //4.删除
    public void removeFirst(){
        removeIndex(0);
    }
    public void removeLast(){
        removeIndex(size-1);
    }
    public void removeIndex(int index){
        if(index<0||index>size){
            System.out.println("get index illegal!");
        }
        for (int i = index; i < size-1; i++) {
            data[i]=data[i+1];
        }
        size--;
        data[size]=0;
    }
    public void removeOneValue(int val){
        for (int i = 0; i < size; i++) {
            if(data[i]==val){
                removeIndex(i);
                return;
            }
        }
    }
    public void removeAllValue(int val){
        for (int i = 0; i < size; i++) {
            while(data[i]==val){
                removeIndex(i);
            }
        }
    }

    //5.判断数组中是否有次值
    public boolean isAbove(int val){
        for (int i = 0; i < size; i++) {
            if(data[i]==val){
                return true;
            }
        }
        return false;
    }


    //输出
    public String toString() {
        String ret = "[";
        // 遍历data数组
        for (int i = 0; i < size; i++) {
            ret += data[i];
            if (i != size - 1) {
                ret += ",";
            }
        }
        ret += "]";
        return ret;
    }

    //扩容
    private void grow(){
        int[] newData=Arrays.copyOf(this.data,this.data.length<<1);
        this.data=newData;
    }
}

参照方法は次のとおりです。

//顺序表
public class Test {
    public static void main(String[] args) {
        MyArray myArray=new MyArray();

        //增
        System.out.println("增:");
        myArray.addFirst(1);
        myArray.addLast(3);
        myArray.addLast(4);
        myArray.addIndex(1,2);
        System.out.println(myArray);

        //查
        System.out.println("查:");
        System.out.println(myArray.getValueIndex(3));
        System.out.println(myArray.getIndexValue(2));

        //改
        System.out.println("改:");
        myArray.change(1,5);
        System.out.println(myArray);

        //删
        System.out.println("删:");
        myArray.removeIndex(0);
        myArray.removeLast();
        System.out.println(myArray);

        //判断数组中是否有此值
        System.out.println("数组中是否有此值:");
        System.out.println(myArray.isAbove(5));
    }
}

上記の入力結果に基づくと、次のようになります。

おすすめ

転載: blog.csdn.net/m0_62218217/article/details/121581579