如何在Java中创建和获取关联数组,就像在PHP中一样?
例如:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
如何在Java中创建和获取关联数组,就像在PHP中一样?
例如:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
当前回答
再仔细考虑一下,我想把元组作为处理这个问题的一种更通用的方式。虽然元组不是Java原生的,但我使用Javatuples来提供其他语言中存在的相同功能。如何处理所问问题的一个例子是
Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>();
Pair p1 = new Pair(0, "name");
arr.put(p1, "demo");
我喜欢这种方法,因为它可以通过api提供的类和方法扩展到三元组和其他更高阶的分组。
其他回答
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不像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"
你可以通过地图来实现。类似的
Map<String, String>[] arr = new HashMap<String, String>[2]();
arr[0].put("name", "demo");
但是当你开始使用Java时,我相信你会发现,如果你创建一个代表你的数据的类/模型将是你最好的选择。我会这么做
class Person{
String name;
String fname;
}
List<Person> people = new ArrayList<Person>();
Person p = new Person();
p.name = "demo";
p.fname = "fdemo";
people.add(p);
看看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接口
这是那个页面上的一个例子。
import java.util.*;
public class Freq {
public static void main(String[] args) {
Map<String, Integer> m = new HashMap<String, Integer>();
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null) ? 1 : freq + 1);
}
System.out.println(m.size() + " distinct words:");
System.out.println(m);
}
}
如果使用:
java Freq if it is to be it is up to me to delegate
你会得到:
8 distinct words:
{to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}