可変次元の文字列の配列を返す必要があるクラスがある場合(そしてその次元はクラスのメソッドを実行したときにのみ決定できます)、クラスのコンストラクターで動的配列を宣言するにはどうすればよいですか?
質問が十分に明確でなかった場合は、
PHPでは、文字列の配列をとして宣言し$my_string_array = array();
、それに要素を追加するだけで済みます。$my_string_array[] = "New value";
上記のコードはJavaと同等ですか?
可変次元の文字列の配列を返す必要があるクラスがある場合(そしてその次元はクラスのメソッドを実行したときにのみ決定できます)、クラスのコンストラクターで動的配列を宣言するにはどうすればよいですか?
質問が十分に明確でなかった場合は、
PHPでは、文字列の配列をとして宣言し$my_string_array = array();
、それに要素を追加するだけで済みます。$my_string_array[] = "New value";
上記のコードはJavaと同等ですか?
java.util package
特にArrayList
クラスを調べてください。、などのメソッドが.add() .remove() .indexof() .contains() .toArray()
あります。
プレーン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.util
HashMap
マップを作成したら、
map.put("key", "string")
文字列を追加するために使用map.get("key")
キーで文字列にアクセスするために使用します。java.util.Map
重複するキーを含めることはできないことに注意してください。同じキーで連続して呼び出すput
と、最後の呼び出しで設定された値のみが残り、前の値は失われます。しかし、これはPHP連想配列の動作でもあると思うので、驚くべきことではありません。
List
代わりに作成してください。
List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
Javaには動的配列はありません。配列の長さは固定されています。同様の構造はArrayList
、実際の配列がその下に実装されています。配列リストの名前を参照してください:)