我们有这样两个互补 map 的代码:
private final Map<Integer, String> idToName = new HashMap<Integer, String>();
private final Map<String, Integer> nameToID = new TreeMap<String, Integer>();
每当我们将一些东西放入一个时,我们也会像这样放入另一个(键和值颠倒):
nameToID.put(name, id);
idToName.put(id, name);
我们遇到了这个应用程序的内存问题。似乎这里有很多重复。有没有办法提高内存效率?我们可以使用的一些单一结构?我意识到这可能会以牺牲时间效率为代价,所以我很想知道权衡是什么。
最佳答案
这正是Guava's BiMap
确实如此,尽管您只能获得这么多额外的内存效率。 BiMap
的最大优势与其说是内存效率,不如说是“它负责确保值是唯一的,而且你不会忘记更新逆映射。”
BiMap<Integer, String> idToName = HashBiMap.create();
idToName.put(1, "foo");
idToName.inverse(); // returns a BiMap mapping "foo" to 1
idToName.inverse().put("bar", 2); // idToName now has an extra mapping 2 -> "bar"
(披露:我为 Guava 做出贡献。)
关于java - 补充 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12752093/