- ベストアンサー
動的配列確保
JAVA初心者です。 VBでのRedim Preserve、CのreallocみたいなものはJAVAには無いのでしょうか? 要はあらかじめ配列数がわかっていない時に動的配列確保を行いたいのです。 Objectではなく、基本クラスのint、byte等の配列に使いたいと思っております。 ArrayListが近い事が出来そうだったのですが、Objectにしか使用出来ないので、 断念しました。教えてください。
- みんなの回答 (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 だったのか、…… が判別できる。 などの利点があります。
その他の回答 (2)
- liar_adan
- ベストアンサー率48% (730/1515)
配列の取り直しそのものはなかったと思いますが、 宣言はどこでも可能であり、 配列の要素数は変数で指定することができるので、 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だって内部では、 別の配列を確保してコピーしている(場合もある)わけだし。
お礼
ありがとうございました。
- UKY
- ベストアンサー率50% (604/1207)
ArrayList の int 版や byte 版を自作するか、int や byte の値を Integer や Byte クラスのインスタンスでラップして ArrayList に入れるか、のどちらかでしょうね。
補足
たとえば、ラップするとは、 byte b = 1; ArrayList a = new ArrayList(); a.add(String.valueOf(b)); こういう風にStringに変換すればいいという事でしょうか。これでうまくいきました。ありがとうございます。 ですが、言わんとした事はこれじゃないですか? もし、違うのであれば、具体的に教えてください。
お礼
2度もご返答ありがとうございました。よくわかりました。