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

Для разработки веб-сервисов мне нужно сделать многоуровневый ассоциативный массив следующим образом

Array
(
    [0] => Array
        (
            [id] => 1100
            [content] => This is content
            [creator_info] => Array
                (
                    [id] => 1
                    [fname] => abc
                    [lname] => xyz
                )

            [tag_info] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [name] => my
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [name] => you
                        )

                    [2] => Array
                        (
                            [id] => 5
                            [name] => your
                        )

                )

            [created_date] => 14 JAN 2012
        )

    [1] => Array
        (
            [id] => 1101
            [content] => This is content1
            [creator_info] => Array
                (
                    [id] => 2
                    [fname] => abc1
                    [lname] => xyz1
                )

            [tag_info] => Array
                (
                    [0] => Array
                        (
                            [id] => 35
                            [name] => wer
                        )

                    [1] => Array
                        (
                            [id] => 47
                            [name] => cvb
                        )

                    [2] => Array
                        (
                            [id] => 51
                            [name] => mnv
                        )

                )

            [created_date] => 15 JAN 2012
        )

)

со ссылкой на этот вопрос я использую ArrayList.

следующим образом

В Java нет ассоциативных массивов, как в PHP.

Существуют различные решения для того, что вы делаете, но это зависит от того, как вы хотите искать информацию. Вы можете легко написать класс, который хранит всю вашу информацию и сохранять ее экземпляры в ArrayList.

public class Foo{
    public String name, fname;

    public Foo(String name,String fname){
        this.name=name;
        this.fname=fname;
    }
}

А потом ...

List<Foo> foos = new ArrayList<Foo>();
foos.add(new Foo("demo","fdemo");
foos.add(new Foo("test","fname");

Так что вы можете получить к ним доступ, как ...

foos.get(0).name;
=> "demo"

Это радует меня за один уровень. Если я продолжу в том же духе, это будет выглядеть как сложная процедура.

Я хочу что-то простое с высокой скоростью.

Последние 3 дня я работаю в нем, и у меня есть успех для следующих

Map<String,Object> myMap1 = new HashMap<String, Object>();
List<Map<String , Object>> myMap  = new ArrayList<Map<String,Object>>();
Map<String,String> user_info = new HashMap<String, String>();
user_info.put("fname", "xyz");
user_info.put("lname", "pqr");
myMap1.put("id", 20);
myMap1.put("content", "This is content");
myMap1.put("creator_info", user_info);
myMap1.put("timestamp", "11 Jan 2012");
myMap.add(0,myMap1);

до сих пор не понимаю, как это сделать для tags_info

есть ли библиотека для этой вещи ....?

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Java имеет вид ассоциативных массивов.Они называются Карты (см. Реализации java.util.Map).С помощью map вы можете связать значение с ключом, например,

Map<String, String> mymap = new HashMap<String, String>();
mymap.put("one", "1");
mymap.put("two", "2"); 
// etc.

Таким образом, для решения вашей проблемы вы можете создать сложную структуру данных, которая представляет собой комбинацию массивов, списков (см. Java.util.List) и карт.1004 *

Но ваша структура выглядит слишком сложной и не поддается легкому управлению.Итак, ваше предложение хорошо.Создайте классы, такие как Foo, возможно, создайте еще один, содержащий несколько экземпляров Foo и т. Д.

1 голос
/ 03 июля 2014

Это старый, я знаю, но я чувствовал, что просто должен ответить за всех, кто читает это.Java - это объектно-ориентированный язык, поэтому думайте о своей структуре данных в терминах «объектов».Забудьте о глубоких конструкциях массивов, которые PHP заставляет разработчиков создавать.

При переходе с языка, такого как PHP, на Java вы должны оставить «PHP» способ делать вещи и охватывать объекты.

public class Content {
    String content;
    int id;
    List<Tag> getTags() {...}
    List<Creator> getCreators() {...}

}
public class Tag {
    int id;
    String name;
}
public class Creator {
    String fname;
    String lname;
}

При использовании объектов, например, сделайте следующее...

List<Creator> creators = content.getCreators();
List<Tag> tags = content.getTags();
...