我是使用收藏品的新手,所以我对如何做到这一点很困惑。我正在尝试使用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;上收到错误。我认为这是正确的方法,但我显然是错的。有没有人对我做错了什么有任何想法?
答案 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);