8

2次元配列のようなものを実装したい。

これに最も適したデータ構造は何ですか? 配列またはその他のデータ構造で十分です。私の要件を満たす他のデータ構造があれば教えてください。

2 次元配列はプログラムの早い段階で宣言する必要がありますが、固定されていないため、配列を使用したくありません。サイズは実行時に決定されます。

また、行数は列数と同じになります。行と列の両方に同じ名前が付けられるため、これは修正されています。

また、この 2 次元データ構造を Map と同じようにトラバースしたいと考えています。

4

4 に答える 4

1

(コメントに基づいて編集)

サイズが実行時に決定される場合、それは問題ではありません。これはうまくいくかもしれません:

final int[][]              data;
final int                  size;
final Map<String, Integer> names;

// code that sets the size variable
names = new HashMap<String, Integer>();
data  = new int[size][size];

names.put("ID-A", 0);
names.put("ID-B", 1);

data[names.get("ID-A")][names.get("ID-A")] = 39;
data[names.get("ID-A")][names.get("ID-B")] = 40;
data[names.get("ID-B")][names.get("ID-A")] = 41;
data[names.get("ID-B")][names.get("ID-B")] = 42;
于 2009-03-26T03:55:55.850 に答える
0

配列は実行時にサイズを変更できます。行/列のサイズがあまり頻繁に変化せず、データがまばらすぎない場合は、配列が最適です。

class TwoDimArray {
    public int[][] createArray(int nRows, int nCols) {
        return new int[nRows][nCols];
    }
    public int[][] resizeArray(int[][] oldArray, int nRows, int nCols) {
        int[][] newArray = new int[nRows][nCols];
        for (int i=0; i<Math.min(oldArray.length, nRows); ++i)
            for (int j=0; j<Math.min(oldArray[i].length, nCols); ++j)
                newArray[i][j] = oldArray[i][j];
        return newArray;
    }
}
于 2009-03-26T03:55:44.680 に答える