我们有两个互补的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"

(公开:我为番石榴做出了贡献。)

08-24 17:04