gpt4 book ai didi

java - 在 Java 中用一组特定的数据干净地初始化字典

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:59 27 4
gpt4 key购买 nike

我很好奇如何在 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);
}
}
}

非常感谢!

最佳答案

注意:最初的答案已有 8 年多的历史,Java 从那时起已经取得了长足的进步。截至目前,我建议:

var map = Map.of(
"BC", List.of("AB"),
"AB", List.of("BC", "SK"),
"SK", List.of("AB", "MB"),
"MB", List.of("SK")
);

这是我所知道的最好的技术:

    Map<String, String> myMap = new HashMap<String, String>() {{
put("foo", "bar");
put("key", "value");
//etc
}};

注意双括号——这通常称为双括号初始化。

你实际上在做的是创建一个扩展 HashMap 的匿名内部类,你的新子类包含一个初始化 block ,你可以在其中调用任何保证在实例可以使用之前执行的任意代码。

另请注意,出于任何原因,“菱形运算符”不能与匿名类一起使用。

这对于测试类来说是一种很好的技术,但我倾向于避免在生产代码中使用它。

编辑:我想我应该回答你的实际问题!

双括号初始化可能是“纯”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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com