如何在Java中创建和获取关联数组,就像在PHP中一样?

例如:

$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';

当前回答

在Java中没有关联数组这种东西。它最接近的亲戚是Map,它是强类型的,但是语法/API没有那么优雅。

这是基于你的例子你能得到的最接近的结果:

Map<Integer, Map<String, String>> arr = 
    org.apache.commons.collections.map.LazyMap.decorate(
         new HashMap(), new InstantiateFactory(HashMap.class));

//$arr[0]['name'] = 'demo';
arr.get(0).put("name", "demo");

System.out.println(arr.get(0).get("name"));
System.out.println(arr.get(1).get("name"));    //yields null

其他回答

看看Map接口和具体类HashMap。

创建一个Map:

Map<String, String> assoc = new HashMap<String, String>();

添加一个键值对。

assoc.put("name", "demo");

检索与某个键相关的值。

assoc.get("name")

当然,你可以创建一个map数组,因为这似乎是你想要的:

Map<String, String>[] assoc = ...

在Java中没有关联数组这种东西。它最接近的亲戚是Map,它是强类型的,但是语法/API没有那么优雅。

这是基于你的例子你能得到的最接近的结果:

Map<Integer, Map<String, String>> arr = 
    org.apache.commons.collections.map.LazyMap.decorate(
         new HashMap(), new InstantiateFactory(HashMap.class));

//$arr[0]['name'] = 'demo';
arr.get(0).put("name", "demo");

System.out.println(arr.get(0).get("name"));
System.out.println(arr.get(1).get("name"));    //yields null

Java不支持关联数组,但是可以使用Map轻松实现。例如,

Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc

map.get("name"); // returns "demo"

更准确的例子(因为你可以用任何符合你需要的对象替换String)应该声明:

List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name"); 

有关更多信息,请参阅官方文档

Java等价于Perl的散列

HashMap<Integer, HashMap<String, String>> hash;

Java不像PHP那样有关联数组。

对于您正在做的事情,有各种解决方案,例如使用Map,但这取决于您想如何查找信息。您可以轻松地编写一个类来保存所有信息,并将它们的实例存储在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"