我有一个这种类型的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(); 是的,我在做任何交叉之前打印这些东西。
任何想法为什么这样做?
答案 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);