質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top