Answers:
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");
ArrayList
使用。但这是另一个讨论。
HashMap
,并且一定要没有故意对行为进行基准测试并为您的用例找到更好的负载因子。指定初始大小的唯一原因是,如果您事先知道地图将非常大。HashMap
如果为空,不会浪费(太多)内存,但是如果您打算创建一个大型地图,则可以通过预先指定其大小来保存多个数组调整大小。
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, 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);
Java中没有关联数组之类的东西。它的最接近的亲戚是a 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
LazyMap.decorate
和InstantiateFactory
和东西呢?
好吧,我也在寻找关联数组,并发现地图列表是最好的解决方案。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class testHashes {
public static void main(String args[]){
Map<String,String> myMap1 = new HashMap<String, String>();
List<Map<String , String>> myMap = new ArrayList<Map<String,String>>();
myMap1.put("URL", "Val0");
myMap1.put("CRC", "Vla1");
myMap1.put("SIZE", "Vla2");
myMap1.put("PROGRESS", "Vla2");
myMap.add(0,myMap1);
myMap.add(1,myMap1);
for (Map<String, String> map : myMap) {
System.out.println(map.get("URL"));
}
//System.out.println(myMap);
}
}
HashMap<Integer, HashMap<String, String>> hash;
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}
Java中的关联数组,例如PHP中:
SlotMap hmap = new SlotHashMap();
String key = "k01";
String value = "123456";
// Add key value
hmap.put( key, value );
// check if key exists key value
if ( hmap.containsKey(key)) {
//.....
}
// loop over hmap
Set mapkeys = hmap.keySet();
for ( Iterator iterator = mapkeys.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
String value = hmap.get(key);
}
更多信息,请参见Class SoftHashMap:https ://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
使用ArrayList <Map <String,String>>
这是一个代码示例:
ArrayList<Map<String, String>> products = new ArrayList<Map<String, String>>();
while (iterator.hasNext()) {
Map<String, String> product = new HashMap<String, String>();
Element currentProduct = iterator.next();
product.put("id",currentProduct.get("id"));
product.put("name" , currentProduct.get("name") );
products.add(product );
}
System.out.println("products : " + products);
输出:
产品:[{id = 0001,名称= prod1},{id = 0002,名称= prod2}]
实际上,Java确实支持被称为字典的关联数组!
想一想,我想把元组作为处理此问题的更通用的方法。虽然元组不是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提供的类和方法将其扩展到三元组和其他更高序的分组。
NullPointerException
如果外部地图不包含用于输入的地图,则将抛出此错误0
。$ arr [0] ['name'](我一点都不懂这种语言)对PHP来说不是更宽容吗?