2011-02-16 42 views
2

我来自Perl编程的世界,我不熟悉如何在Java中创建哈希列表。散列表的数组/列表?

在Perl中,创建散列的名单是很容易。

 
@rows = (
{ food=>'pizza'}, 
{ drink=>'coke'} 
); 

读出来也很容易:

 
foreach my $row (@$rows){ 
print $row->{food}; 
print $row->{drink}; 
} 

一个如何将完成在Java中类似的东西?或者只是用字符串,或者还有对象的可能性?

回答

8

下大致相当于你的Perl代码。

List<Map<String,String>> mapList = new ArrayList<Map<String,String>>(); 
Map<String,String>> map1 = new HashMap<String,String>(); 
map1.put("food", "pizza"); 
Map<String,String>> map2 = new HashMap<String,String>(); 
map2.put("drink", "coke"); 
Collections.addAll(mapList, map1, map2); 

... 

for (Map<String,String> map : mapList) { 
    System.out.println("food is " + map.get("food")); 
    System.out.println("drink is " + map.get("drink")); 
} 

但是,正如您所看到的,这比Perl中的繁琐得多。这使我想到,在Java中使用自定义类而不是关联数组(例如Map实例)来完成这种事情通常是更好的主意。然后,你可以这样写,就像这样:

List<Diet> dietList = new ArrayList<Diet>(); 
Collections.addAll(dietList, new Diet("pizza", null), new Diet(null, "coke"); 

... 

for (Diet diet : dietList) { 
    System.out.println("food is " + diet.getFood()); 
    System.out.println("drink is " + diet.getDrink()); 
} 

这种方法(使用自定义类)通常更强劲,更高效,并为您提供更可读的代码。

2
List<Map<String,String>> mapList = new ArrayList<HashMap<String,String>>() 

没有代码,你已经试过以上规格我可以提供你在做什么 寻找一个例子。询问更多细节,我可以提供更多信息。

遍历列表:

for (Map<String, String> map : mapList) { 
    String value = map.get("food"); 
} 
1

其实在Java中相当长的比较到perl :(

要创建:

List<Map<String,String>> list = new ArrayList<Map<String,String>>(); 

Map value1 = new HashMap(); 
value1.put("foo", "pizza"); 
list.add(value1); 

Map value2 = new HashMap(); 
value2.put("drink", "coke"); 
list.add(value2); 

阅读:

for (Map<String,String> element : list) { 
    // print keys and values 
} 

如果你想要东西莫重新动态,仍​​然可以访问java库,你可以使用Groovy(或Scala或clojure)。