Java 清除HashMap中List类型的值

Java 清除HashMap中List类型的值,java,list,hashmap,Java,List,Hashmap,我使用HashMap来存储键/值对。键包含重复项,值为列表。每当出现新键时,我都要清除值列表。到目前为止,我的代码是 Map<Integer, List<Integer> > bandsMap = new HashMap< Integer, List<Integer> >(); List<Integer> erfcn = new ArrayList< Integer >(); for(int i=0 ; i<freq

我使用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);
Map bandsMap=newhashmap();
List erfcn=newarraylist();

对于(int i=0;i,您可以从
映射中获取键的
列表
,并将其追加

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

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

所以,移动这条线:

List<Integer> erfcn = new ArrayList< Integer >();
List erfcn=newarraylist();
远离bandsMap的声明。直接在添加频率的函数中声明它,如下所示:

List<Integer> erfcn = bandsMap.get(band_number);
if (erfcn == null) erfcn = new ArrayList<Integer>();
List erfcn=bandsMap.get(带编号);
如果(erfcn==null)erfcn=newarraylist();

创建新列表时需要检查erfcn是否为null,不是吗?:相反地帮助了OP;)我还建议您从中查看Multimaps。为每个波段编号创建新列表是否重要?对于同一波段,获取频率并将其存储在列表中的函数可能会调用1000次number@UmairIqbal是,否则您总共只有一个列表对象,每个关键点都指向同一个对象和相同的项目。您需要为每个波段编号列出一个列表。
List<Integer> erfcn = bandsMap.get(band_number);
if (erfcn == null) erfcn = new ArrayList<Integer>();