Java中的多维数组类似于PHP

3

我想在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个回答

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

基本上,该解决方案是用一个新类(因此使用了PermGen)覆盖了一个ArrayList,并且该新类具有实例初始化程序和附加命令。每个添加还使用了一个重写的HashMap类与实例初始化程序。这可能被认为是Java中的“合成糖”。


+1 是加法,虽然有点复杂。也许我们应该称其为“句法糖果”,因为它留下了一种苦涩的味道。:) 只是挑刺一下,你正在使用实例初始化程序,而不是静态初始化程序。 - Ted Hopp
@TedHopp 是的,你说得对,关于那个初始化器,我会改名的。 - bezmax

4
在您的情况下,您需要一个映射数组。
类似以下内容: ```html

Something like:

```
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...

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

很遗憾,没有什么好的语法糖可以让你在不编写一些过程代码的情况下声明这样的数据结构。


实际上,在Java中有一种“合成糖”,但会创建大量不必要的permgen空间(实际上并不是那么多,但仍然是不必要的)。如果您感兴趣,我已经更新了我的答案。 - bezmax

0
Java中的多维数组是通过数组嵌套实现的。
例如:int foo[][] = new int[8][8];
foo[0][0] = 3;
不过在你的情况下,确实需要一个Map数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接