Java中的多级关联数组(类似于PHP)

3

为了开发Web服务,我需要创建如下的多级关联数组:

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"

这让我在单层级别上感到满意。如果继续保持下去,它看起来会变成一个复杂的过程。

我想要一个简单且速度快的程序。

在过去的三天里,我一直在努力,并且已经成功实现了以下内容:

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

Java有一种关联数组,称为Map(请参见java.util.Map的实现)。使用Map,您可以将值与键相关联,例如:

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

为了解决您的问题,您可以创建一个复杂的数据结构,其中包含数组、列表(请参阅 java.util.List)和映射。

但是,您的结构看起来过于复杂,不易于管理。因此,您的建议很好。创建像 Foo 这样的类,可能还要创建另一个类来保存多个 Foo 实例等。


1
有没有任何库可以帮助我解决这个问题..? 我不应该是第一个遇到这个问题的人...! 在问题中,我也更新了我的代码,欢迎任何评论.. - KuKu

2

我知道这是旧的,但是我觉得我必须为任何其他阅读此内容的人回复。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();

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