使用put()方法创建Map

时间:2013-07-24 14:26:38

标签: java

我正在尝试以<K, List<V>>格式创建一个词典。

private static Map<String, Collection<String>> dict = new HashMap<String, Collection<String>>();

使用new HashMap<>();new HashMap<String, ArrayList<String>>();会引发不兼容的数据类型错误

我需要一本类似下面的词典。

a: apple, ajar, axe, azure
b: ball, bat, box
d: dam, door, dish, drown, deer, dare
u: urn, umbrella
y: yolk

要做到这一点,我在代码下面打字。 put()返回不兼容的参数编译错误。在这个例子中使用put()的正确方法是什么?

dict.put("a", "apple");
dict.put("a", "ajar");
.
.
.
dict.put("u", "umbrella");
dict.put("y", "yolk");

6 个答案:

答案 0 :(得分:7)

您需要将List作为值放置到地图中,例如:

List<String> listA = Arrays.asList("apple", "ajar", "axe", "azure");
dict.put("a", listA);

或者,您可以使用guava Multimap,它允许将多个值映射到给定键。

答案 1 :(得分:1)

这是因为你需要将一个arrayList放在值中,因为你的Map声明是Map<String, Collection<String>>所以它不能Map<String, String>

 ArrayList<String> list = new ArrayList<String>();
 list.add("apple");
 dict.put("a",list );

根据java 7,您可以使用菱形运算符来执行此操作,因此您可以将地图创建为

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

答案 2 :(得分:1)

我首先要将字典的类型更改为

private static Map<Character, ArrayList<String>> dict = new HashMap<>();

它允许更容易放置数组列表,因为泛型不是协变的。

对于每个字母,请创建:

ArrayList<String> myList=new ArrayList<>();

put()

命令
dict.put(myList);

然后你可以添加单词:

dict.get(letter).put(word);

答案 3 :(得分:1)

你需要的是这个;

    List al = new ArrayList<String>();
    al.add("apple");
    al.add("ajar");

    HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
    hm.put("a", al);

    System.out.println(hm.get("a"));

这是因为,当你使用时;

private static Map<String, Collection<String>>

需要像列表一样的集合 DoNOT 对象作为字符串

插入

答案 4 :(得分:1)

您只能遵循您所做的定义: Map<String, Collection<String>>表示您使用dict.put(a,b),其中a为String,b为Collection

您正在尝试将String作为您的问题的值。 你可能想做类似的事情:

Collection col = dict.get("a");
if (col == null) {
  col = new ArrayList();
}
col.add("apple");
dict.put("a",col);

答案 5 :(得分:1)

您的确切需求是apache-commons的MultiMap功能

MultiMap dict = new MultiHashMap();
dict.put("a", "apple");
dict.put("a", "ajar");
.
.
.
dict.put("u", "umbrella");
dict.put("y", "yolk");