好的,所以我对编程相当陌生,所以很抱歉,如果这个问题真的很简单,我已经在我的Hash Map
中创建了一个ArrayList
,以便我可以在我的哈希图中添加多个值。
我的代码看起来不错(对我来说),但是这一行有一个错误"mymap.add(module,new ArrayList>());"说(
或[预期。浪费了太多时间试图弄清楚这一点,所以我想我会在这里发布。提前感谢任何帮助。另外:是的,我需要这样做,不,我不能使用guava MultiMap
.
public class hashArray {
HashMap<String, ArrayList<Integer>> mymap = new HashMap<String, ArrayList<Integer>>();
public hashArray() {}
public void addEntryHR( String module, Integer result ) {
mymap.add(module, new ArrayList<Integer>>());
您的行中有一个拼写错误和一个错误:
// The typo is right here v
mymap.add(mod, new ArrayList<Integer>>());
删除其中一个>
并将add
更改为put
:
mymap.put(mod, new ArrayList<Integer>());
你得到的错误是关于错别字的。修复该拼写错误会给您一个错误,即add
是一种未知方法。
您需要首先从map对象中获取列表,如下所示-
ArrayList<Integer> list = mymap.get(mod);
if (list==null){
//then create new ArrayList object and assign to list
list=new ArrayList<Integer>();
}
list.add(number); //adding new number to the list
mymap.put(mod,list); //storing in map
问题
- 您在
new ArrayList<Integer>>()
中创建了一个新ArrayList
(其中包含语法错误 ->
太多),但从不向其添加number
。 - 您正在
HashMap
上调用add
,该没有此方法。对于地图,它被称为put
.
建议的解决方案
请参阅下面的代码
Map<String, List<Integer>> myMap = new HashMap<>();
public void addEntryHR(String mod, Integer number) {
List<Integer> numbers = new ArrayList<>();
numbers.add(number);
myMap.put(mod, numbers);
}
其他备注
使用接口
建议使用集合的接口而不是实现。这意味着Map<String, String> myMap
而不是HashMap<String, String> myMap
,List<Integer>
而不是ArrayList<Integer>
。
为什么要这样做?因为这使您可以灵活地使用集合并减少维护工作。假设您改变主意并想使用LinkedList
而不是ArrayList
,那么您只需要将一个new ArrayList<>()
更改为new LinkedList<>()
,而不是整个代码中使用的所有ArrayList
变量。