9

可変次元の文字列の配列を返す必要があるクラスがある場合(そしてその次元はクラスのメソッドを実行したときにのみ決定できます)、クラスのコンストラクターで動的配列を宣言するにはどうすればよいですか?

質問が十分に明確でなかった場合は、

PHPでは、文字列の配列をとして宣言し$my_string_array = array(); 、それに要素を追加するだけで済みます。$my_string_array[] = "New value";

上記のコードはJavaと同等ですか?

4

4 に答える 4

13

java.util package特にArrayListクラスを調べてください。、などのメソッドが.add() .remove() .indexof() .contains() .toArray()あります。

于 2010-09-07T08:07:18.577 に答える
7

プレーンJava配列(つまりString[] strings)は動的にサイズ変更できません。部屋が空いていて、配列に要素を追加したい場合は、より大きな配列を作成し、既存の配列を最初のn位置にコピーする必要があります。

幸いなことに、java.util.Listこの作業を行う実装があります。java.util.ArrayListとは両方ともjava.util.Vector配列を使用して実装されます。

しかし、文字列がたまたま配列に内部的に格納されているかどうかを本当に気にしますか、それともスペースが不足することを心配せずにアイテムを追加し続けることができるコレクションが必要ですか?後者の場合、そこにあるいくつかの汎用List実装のいずれかを選択できます。ほとんどの場合、選択肢は次のとおりです。

  • ArrayList-同期されていない基本的なアレイベースの実装
  • Vector-同期されたアレイベースの実装
  • LinkedList-二重にリンクされたリストの実装、リストの途中にアイテムを挿入するためのより高速な

リストに重複するアイテムがあると思いますか?ユースケースで重複するアイテムが存在しないようにする場合は、を優先する必要がありますjava.util.Set。セットには重複アイテムが含まれないことが保証されています。優れた汎用セットの実装はjava.util.HashSetです。

フォローアップの質問への回答

と同様のインデックスを使用して文字列にアクセスするには、パッケージ$my_string_array["property"]内のに文字列を配置する必要があります。優れた汎用マップの実装はです。Map<String, String>java.utilHashMap

マップを作成したら、

  • map.put("key", "string")文字列を追加するために使用
  • map.get("key")キーで文字列にアクセスするために使用します。

java.util.Map重複するキーを含めることはできないことに注意してください。同じキーで連続して呼び出すputと、最後の呼び出しで設定された値のみが残り、前の値は失われます。しかし、これはPHP連想配列の動作でもあると思うので、驚くべきことではありません。

于 2010-09-07T08:44:36.127 に答える
6

List代わりに作成してください。

List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
于 2010-09-07T08:05:23.117 に答える
1

Javaには動的配列はありません。配列の長さは固定されています。同様の構造はArrayList、実際の配列がその下に実装されています。配列リストの名前を参照してください:)

于 2010-09-07T08:21:09.080 に答える