「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > データ構造: 配列

データ構造: 配列

2024 年 8 月 17 日に公開
ブラウズ:262

Data Structures: Arrays

静的配列

配列は、すべての要素が順番に配置される線形データ構造です。これは、連続メモリ の場所に保存されている 同じ データ型の要素のコレクションです。

初期化

public class Array {
    private T[] self;
    private int size;
    @SuppressWarnings("unchecked")
    public Array(int size) {
        if (size 



コア配列クラスでは、配列のサイズと配列の初期化のための一般的なスケルトンを保存します。コンストラクターでは、配列のサイズを要求し、オブジェクトを作成し、それを目的の配列に型キャストします。

セットメソッド

public void set(T item, int index) {
        if (index >= this.size || index 



このメソッドは、配列に格納される項目と、その項目を格納するインデックスを要求しています。

取得メソッド

public T get(int index) {
        if (index >= this.size || index 



Get メソッドはインデックスを要求し、そのインデックスから項目を取得します。

印刷方法

public void print() {
        for (int i = 0; i 



Print メソッドは、各項目をスペースで区切って、配列のすべてのメンバーを 1 行で出力するだけです。

ソートされた配列

配列ですが、要素自体を並べ替える機能があります。

初期化

public class SortedArray> {
    private T[] array;
    private int size;
    private final int maxSize;
    @SuppressWarnings("unchecked")
    public SortedArray(int maxSize) {
        if (maxSize 



ソートされた配列クラスでは、配列のサイズを保存し、配列の最大サイズと配列の初期化のための一般的なスケルトンも要求します。コンストラクターでは、配列の最大サイズを要求し、オブジェクトを作成し、それを目的の配列に型キャストします。

ゲッター

public int length() {
        return this.size;
    }
 public int maxLength() {
        return this.maxSize;
    }
 public T get(int index) {
        if (index = this.size) {
            throw new IndexOutOfBoundsException("Index out of 
 bounds: "   index);
        }
        return this.array[index];
    }

挿入方法

private int findInsertionPosition(T item) {
        int left = 0;
        int right = size - 1;
        while (left = this.maxSize) {
            throw new IllegalStateException("The array is already full");
        }

        int position = findInsertionPosition(item);

        for (int i = size; i > position; i--) {
            this.array[i] = this.array[i - 1];
        }
        this.array[position] = item;
        size  ;
    }

Insert メソッドは、並べ替えられた形式でその位置に項目を挿入します。

削除方法

    public void delete(T item) {
        int index = binarySearch(item);
        if (index == -1) {
            throw new IllegalArgumentException("Unable to delete element "   item   ": the entry is not in the array");
        }

        for (int i = index; i 



検索方法

private int binarySearch(T target) {
        int left = 0;
        int right = size - 1;
        while (left 



トラバース法

public void traverse(Callback callback) {
        for (int i = 0; i 



コールバックインターフェイス

public interface Callback {
        void call(T item);
    }

トラバースでのコールバック インターフェイスの使用

public class UppercaseCallback implements UnsortedArray.Callback {
    @Override
    public void call(String item) {
        System.out.println(item.toUpperCase());
    }
}

未ソートの配列

上から見てもほぼ同じ
初期化とゲッターは同じです。

挿入方法

public void insert(T item) {
        if (this.size >= this.maxSize) {
            throw new IllegalStateException("The array is already full");
        } else {
            this.self[this.size] = item;
            this.size  ;
        }
    }

削除方法も同じ

検索方法

public Integer find(T target) {
        for (int i = 0; i 



ダイナミックアレイ

動的配列は配列リストまたはリストに似ています。

初期化

public class DynamicArray {
    private T[] array;
    private int size;
    private int capacity;

    @SuppressWarnings("unchecked")
    public DynamicArray(int initialCapacity) {
        if (initialCapacity 



挿入メソッド

private void resize(int newCapacity) {
        @SuppressWarnings("unchecked")
        T[] newArray = (T[]) new Object[newCapacity];
        for (int i = 0; i = capacity) {
            resize(2 * capacity);
        }
        array[size  ] = item;
    }

削除メソッド

public void delete(T item) {
        int index = find(item);
        if (index == -1) {
            throw new IllegalArgumentException("Item not found: "   item);
        }

        for (int i = index; i  1 && size 



他はすべて同じです。
これが配列の操作に役立つことを願っています。幸運を!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/abdulghani002/data- Structures-arrays-1ad4?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3