多个hashmaps指向相同的密钥
我有多个包含key = value字符串对的文件。 这些文件之间的密钥相同,但值不同。 每个文件可以有1000个这样的对。
我想将每个文件存储在一个单独的散列映射中,即map<KeyString, ValueString>
,因此如果有五个文件,则会有五个hashmaps。
为了避免在每个散列映射中重复键,是否可以让每个映射引用相同的键? 请注意,一旦密钥添加到地图中,它将不会被删除。
我考虑将第一个文件作为flyweight模式中的“基础”,这个基础将是内在的一组键/值。 其他剩余的文件将是外在的一组值,但我不知道如何将值与基本(内部)键关联而不需要重复键值?
我接受更简单/更好的方法。
读完密钥后,可以使用String.intern()
。 被调用时,它所做的是:
字符串#实习生Javadoc
我可以考虑一个更简单的方法。 而不是让Map<String, String>
认为来自guava
的Map<String, List<String>
或直接MultiMap<String, String>
。
如果每个键都在每个文件中并且都有值,则可以将第一个文件的值存储在第0个索引处,将第1个索引处的值存储在第1个索引处,等等。
如果它不起作用,我推荐一个Collection<Map<String, String>
,这样你就可以迭代你的Map
。 然后,当您想要将值添加到其中一个Map
,请遍历所有keySet
并且如果其中一个包含该键,那么只需放入从此keySet
返回的对象即可。
其他的解决方案将有一个已经被放置的密钥的HashSet
。 这会更有效率。
首先,我没有看到存储String键的多个实例的问题。 5 HashMap
s * 1000密钥是一个非常小的数字,你不应该有内存问题。
也就是说,如果你仍然想避免重复String
,你可以创建第一个HashMap
,然后你为其他HashMap
完全相同的键。
例如,假设map1
是第一个HashMap
并且它已经填充了第一个文件的内容。
你可以写这样的东西来填充第二个HashMap
:
for (String key : map1.keySet()) {
map2.put (key, someValue);
}
当然,你必须为第一张地图的每个key
找到第二张地图的对应值。 如果密钥在输入文件中没有以相同的顺序存储,这可能需要一些初步的排序步骤。
上一篇: multiple hashmaps pointing to the same key
下一篇: ANTLR v4, JavaLexer and JavaParser returning null as parse tree