我很好奇如何才能更有效地实例化Java中的字典。目前,我有可传递的代码,但是我以一种非常模糊的方式填充了数据。
有什么办法可以像这样初始化字典吗?记录的是python:
westernCanadaAdjList = { 'BC': ['AB'],
'AB': ['BC', 'SK'],
'SK': ['AB', 'MB'],
'MB': ['SK']
}
我发现出于演示目的,这一点要清晰得多。
我当前在Java中的代码:
public class Main {
public static void main(String[] args) {
//Adjacency List representation through a dictionary. Allows fast O(1) lookup time.
Map<String,ArrayList<String>> adjList = new HashMap<String,ArrayList<String>>();
//Adding values for Edmonton
adjList.put("Edmonton", new ArrayList<String>());
adjList.get("Edmonton").add("Neighbour1");
adjList.get("Edmonton").add("Neighbour2");
adjList.get("Edmonton").add("Neighbour3");
//Adding values for Vancouver
adjList.put("Vancouver", new ArrayList<String>());
adjList.get("Vancouver").add("V neighbour1");
adjList.get("Vancouver").add("V neighbour2");
System.out.println(adjList.keySet() +" And Values " + adjList.values());
for (String neighbour: adjList.get("Edmonton")){
System.out.println(neighbour);
}
for (String neighbour: adjList.get("Vancouver")){
System.out.println(neighbour);
}
}
}
非常感谢你!
最佳答案
这是我所知道的最好的技术:
Map<String, String> myMap = new HashMap<String, String>() {{
put("foo", "bar");
put("key", "value");
//etc
}};
注意双括号-这通常称为双括号初始化。
您实际上正在做的是创建一个扩展HashMap的匿名内部类,新的子类包含一个初始化程序块,您可以在其中调用保证可以在使用实例之前执行的任何任意代码。
还要注意,无论出于何种原因,“钻石运算符”都不能与匿名类一起使用。
对于测试类来说,这是一种不错的技术,但是对于生产代码,我倾向于避免使用它。
编辑:以为我应该回答您的实际问题!
双括号初始化可能是“纯” Java中的最佳解决方案,您的Map具体如下所示:
Map<String, List<String>> westernCanadaAdjList = new HashMap<String, List<String>> () {{
put("BC", new ArrayList<String>(){{ add("AB"); }});
put("AB", new ArrayList<String>(){{ add("BC"); add("SK"); }});
put("SK", new ArrayList<String>(){{ add("AB"); add("MB"); }});
put("MB", new ArrayList<String>(){{ add("SK"); }});
}};
...仍然不是 super 棒。 Java确实确实需要Map文字,但是它没有一个。
对于生产代码,我将使用Guava的MultiMap,但老实地用文字填充它并没有多大好处:
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("BC", "AB");
multimap.put("AB", "BC");
multimap.put("AB", "SK");
multimap.put("SK", "SK");
multimap.put("SK", "SK");
multimap.put("SK", "SK");
关于java - 用Java干净地初始化带有一组特定数据的字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35006135/