清除HashMap中List类型的值

时间:2013-11-08 15:16:39

标签: java list hashmap

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

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);

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

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

如果密钥与以前的密钥相同,是否可以检查密钥,然后只需将列表放入地图,否则先清除List然后将其添加到Map?

由于

2 个答案:

答案 0 :(得分:2)

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

所以,移动这一行:

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

远离bandsMap的声明。直接在添加频率的函数内声明它,如下所示:

List<Integer> erfcn = bandsMap.get(band_number);
if (erfcn == null) erfcn = new ArrayList<Integer>();

答案 1 :(得分:1)

您可以从List获取密钥的Map并附加到该密钥。

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

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

if (erfcn == null) {
  erfcn = new ArrayList<>();
}