0

だから私の質問は、Javaでリンクされたリストの配列を作成することは可能ですか?

なぜ私が尋ねているのかについての背景について。私は、正方行列のファイルが与えられるプロジェクトに取り組んでいます。行列の行列式を見つける必要がありますが、リンクされた構造に格納する必要があります。以前に配列を使用してこれと同じことを行ったので、そのソースからかなりの量のソースを再利用できます。これが私がやるべきことです(主に私の以前のプロジェクトに基づいています):

  1. ファイルの各行を文字列として読み取る
  2. 行列の数を数えて、それぞれの開始点と終了点を決定します。
  3. * 各マトリックスの各要素を複数リンクされた ListNode に読み込みます (それらのクラスを作成します)
  4. *各マトリックスに対して繰り返します
  5. それぞれの行列式を処理します。

したがって、星の付いた 2 つの手順は、私が把握するのに苦労している手順です。すべての行列を一度に読み込みたいので、ある行列を読み込んで行列式を実行し、ファイルに戻って別の行列を取得した場合のように、ファイル内のどこにいるのかを見失うことはありません。ただし、リンクされたリストの各表現を格納する方法がわからないため、それぞれを繰り返し処理できます。私の唯一の考えは、各マトリックスを連結リスト構造に読み込み、可能であれば各連結リスト構造を配列に格納することです。不可能な場合、可能な代替手段は何ですか?

4

3 に答える 3

1

LinkedList の配列を格納することは完全に可能です。配列は、プリミティブ型だけでなくオブジェクトにも適用できます。ただし、正方行列は連結リストではないため、Matrix クラスを作成することをお勧めします。1 次元だけでなく、2 次元のデータを持っています。少なくとも、float の 2 次元配列を使用して行列を表し、double[][] の LinkedList を格納できます。表現が実際のオブジェクトに近ければ近いほど、より簡単になります。

于 2012-07-29T20:45:53.307 に答える
0

Javaがすでに持っている標準のLinkedListクラスを使用することが許可されている場合、行列の読み取りと保存の可能な実装は次のとおりです。

int size = 10; //width and height of your matrix. 

LinkedList<LinkedList<Integer>> matrix = new LinkedList<LinkedList<Integer>>();

for (int i = 0; i<size; i++)
{
    LinkedList<Integer> list = new LinkedList<Integer>();
    for (int j = 0; j < size; j++)
    {
        //read the actual item
    }
    matrix.add(list);
}

マトリックス(おそらく数字)を読み取るには、 Scanner というクラスを使用することをお勧めします。ファイルを番号ごとに読み取ることができる新しいスキャナーを作成できます。

Scanner sc = new Scanner(new File("input.txt"));

そして、次のような変換なしで整数値を読み取ることができます。

int x = sc.nextInt();
于 2012-07-29T21:13:28.457 に答える
0

LinkedList[] を宣言することにより、Java でリンクされたリストの配列を作成できますが、そうすると、パフォーマンスが大幅に低下します。行列の乗算を見ると、その理由が説明されます。

A と B が行列で、A の列数が B の行数と等しい場合、A * B[r, c] は A の行 r と B の列 c の内積です。これは、行と列を抽出する必要があることを意味します。私たちの行列。

リスト (任意の並べ替え) から行列を形成する場合、行列を行単位 (つまり、0 番目のリストが行 0 を表す) または列単位 (0 番目のリストが列 0 を表す) に格納できます。

ここで問題が発生します。リンクされたリストでは、メソッド get(n) はリストの先頭から始まり、次のメンバーを n 回検索します。つまり、n 回実行されます。リンクされたリストから作成されたマトリックスは、列の抽出が非常に遅くなるか (行方向に格納されている場合)、行の抽出が非常に遅くなります (列方向に格納されている場合)。

配列の配列を使用してシンプルに保つことをお勧めします。nxn 配列を割り当てることができます

int[][] 値 = 新しい int[n][n];

もちろん、値「n」を定義する必要があります。

これが役立つことを願っています。

于 2012-07-29T22:08:11.800 に答える