Многомерный массив в Java как PHP - PullRequest
3 голосов
/ 09 марта 2012

Я хочу создать многомерный массив в 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 голосов
/ 09 марта 2012

«Путь 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"));
....

Добавлено:

Для полноты ответа приведем еще один способ использования инициализаторов экземпляров. В некоторых случаях это может показаться более симпатичным, чем другие решения, но в основном у него есть один недостаток: он использует незапрошенное пространство пермгена. Не много, но все еще не требуется:

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.

4 голосов
/ 09 марта 2012

В вашем случае вам нужен массив карт.

Что-то вроде:

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 голос
/ 09 марта 2012

Java не имеет ассоциативных массивов;вместо этого вы можете использовать List из Map s.

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 голосов
/ 09 марта 2012

Многомерные массивы в Java выполняются как массивы массивов.

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

foo [0] [0] = 3;

Но да, вам нужен массив Карт в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...