多个hashmaps指向相同的密钥

我有多个包含key = value字符串对的文件。 这些文件之间的密钥相同,但值不同。 每个文件可以有1000个这样的对。

我想将每个文件存储在一个单独的散列映射中,即map<KeyString, ValueString> ,因此如果有五个文件,则会有五个hashmaps。

为了避免在每个散列映射中重复键,是否可以让每个映射引用相同的键? 请注意,一旦密钥添加到地图中,它将不会被删除。

我考虑将第一个文件作为flyweight模式中的“基础”,这个基础将是内在的一组键/值。 其他剩余的文件将是外在的一组值,但我不知道如何将值与基本(内部)键关联而不需要重复键值?

我接受更简单/更好的方法。


读完密钥后,可以使用String.intern() 。 被调用时,它所做的是:

  • 如果字符串不存在,则将该字符串添加到内部池;
  • 如果它已经存在,则返回池中的等效字符串。
  • 字符串#实习生Javadoc


    我可以考虑一个更简单的方法。 而不是让Map<String, String>认为来自guavaMap<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找到第二张地图的对应值。 如果密钥在输入文件中没有以相同的顺序存储,这可能需要一些初步的排序步骤。

    链接地址: http://www.djcxy.com/p/96959.html

    上一篇: multiple hashmaps pointing to the same key

    下一篇: ANTLR v4, JavaLexer and JavaParser returning null as parse tree