データ構造-動的配列CRUD

コンテンツ

線形テーブル

2.動的配列

3.要素を追加します

1.デフォルトでアレイの最後に追加します

2.指定した場所にインデックスを追加します

4.削除

1.最初の要素を削除します

2.ボタンを押して削除します

3.値で削除

5.変更

6.お問い合わせ


線形テーブル

2.動的配列

3.要素を追加します

1.デフォルトでアレイの最後に追加します

動的配列クラス:

package seqlist;

import java.util.Arrays;

/**
动态数组的类:具备增删改查的功能,逻辑结构对外不可见。用户只知道该功能
 */
public class MyArray {
    //封装的数组
    private int[] data;
    //表示动态数组中元素的个数;
    private int size;

    //如果没有传参,默认开辟大小为是10的数组
    public MyArray(){
        this(10);
    }

    public MyArray(int initCap){
        this.data = new int[initCap];
    }

    public void add(int val){
        data[size] = val;
        size++;
        //元素在添加过程中,元素已经填满数组
        if (size == data.length){
            grow();
        }
    }

    /**
     *
     */
    private void grow(){
        this.data = Arrays.copyOf(data,size*2);
    }

    @Override
    public String toString() {
        return "MyArray{" +
                "data=" + Arrays.toString(data) +
                '}';
    }
}

テストクラス:

public class Test {
    public static void main(String[] args) {
        MyArray myArray = new MyArray(3);
        myArray.add(10);
        myArray.add(20);
        myArray.add(30);
        myArray.add(40);
        System.out.println(myArray.toString());
    }
}

テスト結果:配列定義の初期化された長さは3です。追加された要素が配列の長さよりも大きい場合、配列の長さはそれ自体の2倍に拡張されます。

2.指定した場所にインデックスを追加します

 

public void add(int val,int index){
        //先判断index是否非法,index可以等于size,就相当于在数组的尾部插入,index = 0在头部插入
        if (index < 0 || index > size){
            System.err.println("index is ");
        }
        for (int i = size -1;i >= index ;i--){
            data[i+1] = data[i];
        }
        data[index] = val;
        size++;
        //元素在添加过程中,元素已经填满数组
        if (size == data.length){
            grow();
        }
    }

4.削除

1.最初の要素を削除します

public int daleteFrist(){
        return delete(0);
    }
    public int deleteLast(){
        return delete(size - 1);
    }

 

2.ボタンを押して削除します

   public int delete(int index){
        if (index < 0 || index > size){
            System.err.println("下标违法");
            return -1;
        }
        int temp = data[index];
        for (int i = index; i < size - 1; i++) {
            data[i] = data[i+1];
        }
        size-- ;
        return temp;
    }

3.値で削除

public int deleteVal(int val){
        int i = searchByVal(val);
        if (i != -1){
            int delete = delete(i);
            return delete;
        }
        return -1;
    }
    public int[] deleteAllVal(int val){
        MyArray myArray1 = new MyArray(1);
        for (int i = 0; i < size; i++) {
            if (data[i] == val){
                myArray1.add(data[i]);
                delete(i);
            }
        }
        return myArray1.data;
    }

5.変更

    
    public int updateByIndex(int index,int val){
        if (index < 0 || index > size){
            System.err.println("下标违法");
            return -1;
        }
        int oldVal = data[index];
        data[index] = val;
        return oldVal;
    }
    public boolean updateByVal(int oldVal,int val){
        int i = searchByVal(oldVal);
        if (i != -1){
            data[i] = val;
            return true;
        }
        return false;
    }

6.お問い合わせ

  public int searchByIndex(int index){
        if (index < 0 || index > data.length - 1){
            System.err.println("下标违法");
            return -1;
        }
        return data[index];
    }
    public int searchByVal(int val){
        for (int i = 0; i < size-1; i++) {
            if (data[i] == val){
                return i;
            }
        }
        return -1;
    }
    public boolean hasContainVal(int val){
        int i = searchByVal(val);
        if (i != -1){
            return true;
        }
        return false;
    }

おすすめ

転載: blog.csdn.net/qq_52655865/article/details/124245481