2012-03-08 11 views
3

以下に示すPHPのように、多次元配列をJavaで作成したいと思います。私はまったく同じ配列を作成したい。出来ますか?PHPのようなJavaの多次元配列

Array 
(
    [0] => Array 
     (
      [name] => sagar 
      [company] => Visa 
     ) 

    [1] => Array 
     (
      [name] => shloka 
      [company] => Doctor 
     ) 

    [2] => Array 
     (
      [name] => sanket 
      [company] => zon 
     ) 

    [3] => Array 
     (
      [name] => kamlesh 
      [company] => nsc 
     ) 

    [4] => Array 
     (
      [name] => siddhi 
      [company] => KES 
     ) 

    [5] => Array 
     (
      [name] => sanket 
      [company] => zon 
     ) 

    [6] => Array 
     (
      [name] => bunty 
      [company] => India Bull 
     ) 

    [7] => Array 
     (
      [name] => siddhi 
      [company] => KES 
     ) 

) 

答えて

4

あなたの場合、マップの配列が必要です。

のような何か:

List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
// 0 
Map<String, String> tmp = new HashMap<String, String>(); 
tmp.put("name", "sagar"); 
tmp.put("company", "Visa"); 
list.add(tmp); 
// 1 
tmp = new HashMap<String, String>(); 
tmp.put("name", "shloka"); 
tmp.put("company", "Doctor"); 
list.add(tmp); 
// so on, so forth... 
+0

お返事ありがとう..... –

1

Javaは連想配列を持っていません。代わりにListMapを使用することができます。

List<Map<String, String>> myArray = new ArrayList<Map<String, String>>(); 
for (int i = 0; i < max; ++i) { 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("name", names[i]); 
    map.put("company", companies[i]); 
    myArray.add(map); 
} 

残念ながら、あなたには、いくつかの手続きのコードを記述することなく、このようなデータ構造を宣言することができます何の素敵な糖衣構文はありません。

+0

実際、Javaには「合成砂糖」の種類があります。しかし、必要のないpermgen空間をたくさん作り出すでしょう(あまり実際はそうではありませんが、依然として必要ありません)。好奇心が強い場合に備えて私の答えを更新しました。 – bezmax

0

Javaの多次元配列は、配列の配列として行われます。

int foo [] [] =新しいint [8] [8];

foo [0] [0] = 3;

しかし、はい、あなたのケースでは、マップの配列が必要です。

5

の「Javaの道は、」このように、その情報を格納するPOJOクラスを作成することです:あなたはPHPでやった

class UserInfo { 
    private String name; 
    private String company; 

    public UserInfo(String name, String company) { 
     this.name = name; 
     this.company = company; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getCompany() { 
     return company; 
    } 
} 

UserInfo[] users = { 
    new UserInfo("sagar", "visa"), 
    new UserInfo("shloka", "Doctor"), 
    .... 
}; 

しかし、あなたがそれをしたい場合は正確同じように、そこに行く:

public static Map<String,String> createUser(String name, String company) { 
    final Map<String,String> result = new HashMap<String,String>(); 
    result.put("name",name); 
    result.put("company",company); 
    return result; 
} 

List<Map<String,String>> users = new ArrayList<Map<String,String>>(); 
users.add(createUser("sagar","visa")); 
users.add(createUser("shloka","Doctor")); 
.... 

を追加しました:

を解答の完全を期すために、インスタンスイニシャライザを使用する別の方法があります。いくつかのケースでは他の解決方法がよりきれいに見えるかもしれませんが、基本的には欠点が1つあります。それの多くが、それはまだ不要ではありません:

List<Map<String,String>> result = new ArrayList<Map<String,String>>() {{ 
    add(new HashMap<String,String>() {{ 
     put("name", "someName"); 
     put("company", "someCompany"); 
    }}); 
    add(new HashMap<String,String>() {{ 
     put("name", "someName1"); 
     put("company", "someCompany1"); 
    }}); 
}}; 

基本的に、このソリューションは、ほかのコマンドでインスタンス初期化子を持っている(permgenが使用されている理由です)新しいクラスでのArrayListをオーバーライドしています。各追加では、インスタンス初期化子でオーバーライドされたHashMapクラスも使用されます。これは、Javaの「合成糖」と考えられます。

+0

+1のために、それはややバロック側にありますが。 (苦い味が残っているので、「構文的なサッカリン」と呼ぶべきでしょう:))ただ、ニットを選択するだけです。インスタンス初期化子を使用していますが、静的な初期化子は使用していません。 –

+0

@TedHoppはい、あなたはそのイニシャライザについて、名前を変更しようとしています。 – bezmax

+0

お返事ありがとうございます..... –