2012-03-08 27 views
3

我想在Java中創建一個多維數組,如下面所示的PHP。我想創建一個完全相同的數組。可能嗎?Java中的多維數組像PHP

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

非常感謝答案..... – 2012-03-10 09:13:48

1

Java沒有關聯數組;您可以使用或Map

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 2012-03-09 05:19:15

0

Java中的多維數組是以數組數組的形式完成的。

int foo [] [] = new int [8] [8];

foo [0] [0] = 3;

但是,你需要一個地圖數組在你的情況。

5

了「的Java之路」將是使一個POJO類來存儲這些信息,像這樣:

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"), 
    .... 
}; 

但是,如果你想讓它正是你在PHP做的方式相同,你去那裏:

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

補充:

對於答案的完整性的緣故,這裏是使用實例初始化器的另一種方法。在某些情況下,其他解決方案可能看起來更漂亮,但基本上它有一個缺陷:它使用不需要的permgen空間。沒有太多的話,但它仍然是不需要的:

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

基本上這個解決方案覆蓋了新類一個ArrayList(這就是爲什麼使用的PermGen),它與另外一個命令實例初始化。每個添加還使用帶有實例初始值設定項的覆蓋HashMap類。這可能被認爲是Java的「合成糖」。

+0

+1,雖然它有點巴洛克式的一面。 (也許我們應該把它稱爲「語法糖精」,因爲它會留下苦味:))但是,只是選擇一個nit,你使用的是一個實例初始化器,而不是一個靜態初始化器。 – 2012-03-09 05:58:43

+0

@TedHopp是的,你是對的初始化器,將其重命名。 – bezmax 2012-03-09 06:52:24

+0

非常感謝您的回答..... – 2012-03-10 09:13:04