• ベストアンサー

動的配列確保

JAVA初心者です。 VBでのRedim Preserve、CのreallocみたいなものはJAVAには無いのでしょうか? 要はあらかじめ配列数がわかっていない時に動的配列確保を行いたいのです。 Objectではなく、基本クラスのint、byte等の配列に使いたいと思っております。 ArrayListが近い事が出来そうだったのですが、Objectにしか使用出来ないので、 断念しました。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

ラップするというのは、こんな感じです。 byte value = 1; ArrayList list = new ArrayList(); list.add(new Byte(value)); byte や int に対応する、java.lang.Byte や java.lang.Integer などのクラスを使います。例えば new Byte(3) とやると、3 の byte 値を持つ Byte クラスのオブジェクトができます。あくまでもオブジェクトですので、そのままでは足し算や掛け算はできませんが、ArrayList にオブジェクトとして追加できるようになります。 オブジェクトから元の数値に戻すには、byteValue() や intValue() などのメソッドが各クラスに用意されているのでそれを使います。 もちろん、質問者さんが補足に書いたように、文字列に変換して ArrayList にいれる方法でもかまいません。ただし、Byte や Integer クラスのオブジェクトを使うと、 ○「文字列⇔数値」の相互変換の必要が無いので、(一応)速い。 ○元の数値が byte だったのか、int だったのか、short だったのか、…… が判別できる。 などの利点があります。

Vargas
質問者

お礼

2度もご返答ありがとうございました。よくわかりました。

その他の回答 (2)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

配列の取り直しそのものはなかったと思いますが、 宣言はどこでも可能であり、 配列の要素数は変数で指定することができるので、 int[] a = int[10]; ... int n; //必要な要素数。aの長さより大。 int [] b = new int[n]; System.arraycopy(a, 0, b, 0, a.length);//元の配列の内容をコピー a = b; //b配列をa変数に代入 てな風にすればいいのではないでしょうか。 コピーするのが無駄のようだけど、 reallocだって内部では、 別の配列を確保してコピーしている(場合もある)わけだし。

Vargas
質問者

お礼

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

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

ArrayList の int 版や byte 版を自作するか、int や byte の値を Integer や Byte クラスのインスタンスでラップして ArrayList に入れるか、のどちらかでしょうね。

Vargas
質問者

補足

たとえば、ラップするとは、 byte b = 1; ArrayList a = new ArrayList(); a.add(String.valueOf(b)); こういう風にStringに変換すればいいという事でしょうか。これでうまくいきました。ありがとうございます。 ですが、言わんとした事はこれじゃないですか? もし、違うのであれば、具体的に教えてください。

関連するQ&A