Java:配列&ベクトル
-
02-07-2019 - |
質問
PHPでの作業に慣れていますが、最近Javaで作業しており、これを理解しようとして頭痛がしています。この表現をJavaで保存したい:
Array ( ["col_name_1"] => Array ( 1 => ["col_value_1"], 2 => ["col_value_2"], ... , n => ["col_value_n"] ), ["col_name_n"] => Array ( 1 => ["col_value_1"], 2 => ["col_value_2"], ... , n => ["col_value_n"] ) )
このものをJavaで保存するためのクリーンな方法(つまり、ダーティコードなし)はありますか?注意;文字列を配列インデックスとして(1次元で)使用したいのですが、配列の明確なサイズがわかりません。
解決
マップとリストを使用できます(これらはいずれも、複数の方法で実装されたインターフェースであり、あなたの場合に最も適切なものを選択できます)。
詳細については、マップのチュートリアルを確認してください。およびリスト、おそらくコレクションチュートリアル。
例:
import java.util.*;
public class Foo {
public static void main(String[] args) {
Map<String, List<String>> m = new HashMap<String, List<String>>();
List<String> l = new LinkedList<String>();
l.add("col_value_1");
l.add("col_value_2");
//and so on
m.put("col_name_1",l); //repeat for the rest of the colnames
//then, to get it you do
List<String> rl = m.get("col_name_1");
}
}
他のヒント
Map&lt; String、List&lt; String&gt;&gt;
を使用してみてください。これにより、外部マップへのキー/インデックスとして文字列を使用し、値として文字列のリストである結果を取得できます。おそらく、外側のマップには HashMap
を使用し、内側のリストには ArrayList
を使用します。
初期化するために指定したPHPに似たクリーンなコードが必要な場合は、次のようにします。
Map<String, List<String>> columns = new HashMap<String, List<String>>() {{
put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
}};
マップ、ほとんど何でもキーイングされます。 HashMap はほとんどの場合に機能します。
このようなもの。
List<String> col1Vals = new java.util.ArrayList<String>();
col1Vals.add("col_value_1");
col1Vals.add("col_value_2");
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("col_name_1", col1Vals);
もっとシンプルにしたい場合は、 commons-lang ライブラリに MultiMap 。
ベクターは、コレクションフレームワークのレガシーコードです。要素へのアクセスを同期するため、パフォーマンスが低下します。 Listを使用するためのほとんどのユースケースでは、この種のスレッドセーフは必要ありません。その場合でも、 CopyOnWriteArrayList 。