我正在使用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?
由于
答案 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<>();
}