[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00379] Re: JAVA での多次元動的配列の実現



MAMIと申します。えんどうさん、回答ありがとうございます。

yasuyuki さんは書きました:
>Cもそうですが、Java には多次元配列というものは存在しません。
>「配列要素が配列である1次元配列」で表現するしかありません。

むむーー、そうなのですか。
Redim Preserveができれば便利なのに、と思ったのですが。

>多次元配列の要素を拡張する目的は何でしょうか?

例えば、変なたとえですけど
JSPでDBから読み込んだ[プログラムID,プログラム名]というレコードを
あるだけ表示して1行毎にチェックボックスをくっつけるとします。
<html>
   プログラムID  プログラム名  チェックボックス
                :  何行なるかはわからない
</html>

で、オペレータがチェックボックスをオンにしたレコードについてのみ
その後の処理のために
{{プログラムID,プログラム名},{プログラムID,プログラム名}....}
という配列に格納したいような場合、

String[][] myarray = new String[2][];
                                  ~~
とは後ろのエントリ数が決まらないために書けないし、
(→初めにチェックボックスがオンになっている数を数えて
String[][] myarray = new String[2][チェックボックスがオンになっている数];
とする発想は全然ありませんでした)

配列のデータを保持したままエントリ数を増やすことが
できないので
int j = 0;
for (int i=0; i<全部のレコード数; i++){
  if (チェックボックスがオン){
     j++;
     String[][] myarray = new String[2][j];
     myarray[0][j] = プログラムID(i)
             :
  }
}
とも書けないし、と悩んで結局[jfriends:00377]に書いたように
現在のところはHashtableを使っています。

>System.arraycopyメソッドでコピーするのが良いかもです。
ということは
String[][] myarray = new String[2][100];
というように最初は定義しておいて、エントリが足りなくなったら
もっと大きい配列にコピーしなさい、ということですよね。

>Cもそうですが、Java には多次元配列というものは存在しません。
>「配列要素が配列である1次元配列」で表現するしかありません。

Cは全然知らないし、私の頭がVBモードなせいかもしれませんが
動的配列使えないのはやっぱり不便です。
けど無い物は仕方ないですものね。

どうもありがとうございました。


----
 written by Mami ASAI

  Vine Linux 2.5
  Apache1.3.26
  Tomcat v3.3.1
  JDK1.3.1_04
  PostgreSQL 7.1.3