Hashmap arraylist (java)



好的,所以我对编程相当陌生,所以很抱歉,如果这个问题真的很简单,我已经在我的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> myMapList<Integer>而不是ArrayList<Integer>
为什么要这样做?因为这使您可以灵活地使用集合并减少维护工作。假设您改变主意并想使用LinkedList而不是ArrayList,那么您只需要将一个new ArrayList<>()更改为new LinkedList<>(),而不是整个代码中使用的所有ArrayList变量。

最新更新