TreeMap使用字符串键和arraylist

时间:2014-04-08 03:02:35

标签: java collections arraylist treemap

我是使用收藏品的新手,所以我对如何做到这一点很困惑。我正在尝试使用TreeMap来保存一个单词作为键,然后使用ArrayList来保存单词的一个或多个定义。

public class Dict {
    Map<String, ArrayList<String>> dic = new TreeMap<String, ArrayList<String>>();

    public void AddCmd(String word, String def) {
        System.out.println("Add Cmd " + word);
        if(dic.get(word)==null){
            dic.put(word, new ArrayList.add(def));      
        }
    }
}

我在&#34; new ArrayList.add(def)&#34;上收到错误。我认为这是正确的方法,但我显然是错的。有没有人对我做错了什么有任何想法?

4 个答案:

答案 0 :(得分:1)

调用ArrayList#add会返回boolean,这不是Map所需的值,从而导致编译错误。

您需要插入ArrayList然后添加元素。您的代码应如下所示:

ArrayList<String> definitions = dic.get(word);
if (definitions == null) {
    definitions = new ArrayList<String>();
    dic.put(word, definitions);
}
definitions.add(def);

答案 1 :(得分:1)

dic.put(word,new ArrayList.add(def));是罪魁祸首。 因为你已声明map将字符串的Arraylist作为值。要传递给map的值必须是字符串的Arraylist。

但是这行正在添加一个值作为新的ArrayList.add(def),因为你试图创建一个列表并添加元素,add方法返回boolean - &gt;如果失败则可以添加false,则返回true。

所以它意味着地图的值将作为布尔值而不是作为反对地图声明的arraylist。 所以使用下面的代码

ArrayList<String> listOfString = dic.get(word);
if (listOfString == null) {
    listOfString = new ArrayList<String>();
listOfString .add(def);
}
dic.put(word, listOfString );

答案 2 :(得分:0)

你必须将其分解,因为add不会返回原始的ArrayList:

ArrayList<String>> NewList = new ArrayList<String>();
NewList.add(def);
dic.put(word, NewList);

答案 3 :(得分:0)

您实际上并未创建新的ArrayList。试试这个:

ArrayList<String> newDef = new ArrayList<String();
newDef.add(def);
dic.put(word, newDef);