7

私はPHPでの作業に慣れていますが、最近はJavaで作業しており、これを理解しようとして頭痛がしています。この表現をJavaで保存したい:

配列 (
        ["col_name_1"] => 配列 (
                               1 => ["col_value_1"],
                               2 => ["col_value_2"],
                               ... 、
                               n => ["col_value_n"]
                          )、
        ["col_name_n"] => 配列 (
                               1 => ["col_value_1"],
                               2 => ["col_value_2"],
                               ... 、
                               n => ["col_value_n"]
                          )
)

このことをJavaで保存するためのクリーンな方法(つまり、汚いコードがない)はありますか? ノート; 文字列を配列インデックスとして (最初の次元で) 使用したいのですが、配列の明確なサイズがわかりません..

4

4 に答える 4

15

を使用してみてくださいMap<String, List<String>>。これにより、文字列をキー/インデックスとして外側のマップに使用し、結果として文字列のリストを値として取得できます。おそらくHashMap、外側のマップには a を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"));
}};
于 2008-09-27T21:08:14.743 に答える
12

Map と List を使用できます (これらはどちらも、ケースに最も適したものを選択するための複数の方法で実装されたインターフェイスです)。

詳細については、マップリストのチュートリアルを確認してください。コレクションのチュートリアルから始める必要があるかもしれません。

例:

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");

    }
}
于 2008-09-27T21:15:19.487 に答える
5

ほぼすべてのものによってキー設定されたMapが必要です。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があります。

于 2008-09-27T21:07:21.970 に答える
2

Vectorは Collections フレームワークのレガシー コードであることに注意してください。要素へのアクセスを同期するため、パフォーマンスが低下します。List を使用するほとんどのユース ケースでは、この種のスレッドセーフは必要ありません。

于 2008-09-28T03:14:58.527 に答える