HashMap <string,set <string =“”>&gt;即使存在</string,>也无法找到它的密钥

时间:2014-01-30 09:13:27

标签: java hashmap

我有一个这种类型的HashMap

Map<String, Set<String>> list_names = new HashMap<String,Set<String>>();

我已经构建并添加了一个txt文件中的元素,该文件中包含列表名称和一组名称。

98298XSD98      N9823923 N123781 N723872 ....
13214FS923      N9818324 N982389
...             ...

我创建了另一个名为names_list的HashMap,它几乎取代了list_names HashMap的顺序,这样我就可以获得给定名称所在的所有列表。

现在我拥有的HashMap相当大,有超过40万项和60k列表。

在我的代码中的某个地方,我试图多次获取不同列表的集合,然后将这两个列表的交集用于计算目的,

a_list = this.names_lists.get(a);
b_list = this.names_lists.get(b);
// printing lists
//intersection stuff

但有些奇怪的是HashMap没有识别其中一个键(或者许多键)并在一次检索或有时0次检索后将其视为null。

a:0122211029:[R3DDZP35ERRSA]    b:1159829805:[R3ALX1GRMY5IMX, R1204YEYK4MBCA]
a:0122211029:[]                 b:1593072570:[R222JSDL42MS64]

这里,我只是打印名称和names_list.get(key).toString(); 是的,我在做任何交叉之前打印这些东西。

任何想法为什么这样做?

1 个答案:

答案 0 :(得分:1)

计算两个集合的交集时,实际上是修改了其中一个集合。您必须创建一个临时集来保存交集,例如:

a_list = this.names_lists.get(a);
b_list = this.names_lists.get(b);
Set<String> intersection = new HashSet<>(a_list).retainAll(b_list);