4

2 次元の整数配列を格納するデータ構造を探しています。リストは正しいデータ構造ですか、それとも別のものを使用する必要がありますか?

そのようなデータ構造を作成する方法と2次元配列を追加する方法について、誰かが短い例を教えてくれますか?

編集: int[11][7] 配列を格納するデータ構造が必要です。たとえば、10 個の int[11][7] 配列。

4

5 に答える 5

3

多数の配列をデータ構造に格納する必要がある場合は、データの内容を表す に配列を格納し、次にこれらを にint[][]格納することをお勧めします。int[][]ObjectObjectsArrayList

たとえば、これは配列の単純なObjectラッパーですint[][]

public class 2DArray {
    int[][] array;
    public 2DArray(int[][] initialArray){
        array = initialArray;
    }
}

そして、これがあなたがそれらをどのように使用し、それらをArrayList

// create the list
ArrayList<2DArray> myList = new ArrayList<2DArray>();
// add the 2D arrays to the list
myList.add(new 2DArray(myArray1));
myList.add(new 2DArray(myArray2));
myList.add(new 2DArray(myArray3));

私の提案の理由は、あなたのint[][]配列があなたにとって何らかの意味を持たなければならないということです. これをObjectラッパークラスに格納することで、意味を持たせることができます。たとえば、値が座標の場合、 のCoordinates代わりにクラスを呼び出します2DArray。したがって、よりもはるかに多くの意味を持つ をList作成します。Coordinatesint[][][]

于 2012-05-28T13:55:28.217 に答える
2

配列は、情報を保存する方法に関する単なるアイデアではなく、データを保存する方法の実装でもあります。したがって、配列を使用する場合は、データ構造が既に選択されています。

データをデータ構造に格納する場合は、データ構造の使用方法に集中する必要があります。データを取得して格納する方法、各操作を行う頻度、処理するデータの量について考える必要があります。 . 次に、どの方法が最適でなければならないかを知り、データがメモリに常駐できるかどうかなどを把握します。

これを解決できる方法の例をいくつか挙げると、次のようになります。

  1. 配列を 1D 配列にフラット化し、インデックスとして x*num_columns+y を使用できます
  2. ペアを含むオブジェクトを作成し、配列をマップに配置できます
  3. リンクされたリストを含むリンクされたリストを使用できます。
  4. 木を含む木を使用できます。
  5. 木を含むリストを使用できます。
  6. ペアに対して半順序を作成し、すべての要素を 1 つのツリーに配置できます。

これらのソリューションはすべて、どの操作を最適化することがより重要であるかに大きく依存しています。データ構造を迅速に更新することがより重要な場合もあれば、そうでない場合もあります。決定的な要因は、実際にはプログラムの残りの部分です。

于 2012-05-28T14:02:30.370 に答える
1

したがって、2D 配列のコレクションを格納する必要があります。コレクションが固定サイズの場合は、別の次元を追加します。

int[][][] arrColl

コレクションのサイズが可変の場合は、好みの実装Collection<int[][]>(ArrayList、LinkedList など)を使用します。

Collection<int[][]> arrColl
于 2012-05-28T14:03:39.957 に答える
0

あなたの編集に基づいて:

List<Integer[][]>必要なものです - これにより、任意の数の 2DInteger配列を追加できます。これには、ボックス化とボックス化解除が含まれることに注意してください。これは、可能であれば回避する必要があります。

それで十分な場合 (必要な 2D int 配列の数が事前にわかっている場合)、int[][][]int の 3D 配列を使用することもできます。これにはボックス化/ボックス化解除は含まれません。

于 2012-05-28T14:07:28.253 に答える
0

サイズが固定されている場合は、int[][]elseを使用しますList<List<Integer>>

于 2012-05-28T13:54:51.553 に答える