我们有两个互补的Maps的代码,如下所示:
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"
(公开:我为番石榴做出了贡献。)