4

我正在使用 HashMap 来存储键/值对。键包含重复项,值是列表。每当有新键出现时,我想清除值列表。到目前为止我的代码是

Map<Integer, List<Integer> > bandsMap = new HashMap< Integer, List<Integer> >();
List<Integer> erfcn = new ArrayList< Integer >();

for(int i=0 ; i<frequencies.length; i++)
    erfcn.add(frequencies[i]);

bandsMap.put( band_number, erfcn);

我在这里所做的是我有一个频率数组,我将数组的值添加到我的列表中,然后将列表放入我的地图中。当 band_number 相同时,它工作正常。

假设如果前 10 次band_number = 20,它只是在列表中添加新值并将该列表添加到key=20我的地图中。但是当新密钥到达时,它也会将新内容添加到旧密钥中。

是否可以通过某种方式检查密钥是否与前一个密钥相同,然后简单地将列表放入地图,否则首先清除列表然后将其添加到地图?

谢谢

4

2 回答 2

2

听起来您只创建erfcn一次列表。每个bandsMap.put调用都将同一个列表对象与所有不同的键相关联。相反,您需要为每个band_number创建一个new列表。如果存在,您还需要重新使用该键的现有列表。

所以,移动这一行:

List<Integer> erfcn = new ArrayList< Integer >();

远离bandMap的声明。直接在添加频率的函数内部声明,如下:

List<Integer> erfcn = bandsMap.get(band_number);
if (erfcn == null) erfcn = new ArrayList<Integer>();
于 2013-11-08T15:24:14.330 回答
1

您可以从中获取Listfor 密钥Map并附加到它。

List<Integer> erfcn = bandsMap.get(band_number);

如果get(band_number)返回null,则创建一个新的List.

if (erfcn == null) {
  erfcn = new ArrayList<>();
}
于 2013-11-08T15:18:56.837 回答