我们有两个互补的地图代码,如下所示:
private final Map<Integer, String> idToName = new HashMap<Integer, String>();
private final Map<String, Integer> nameToID = new TreeMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)
每当我们把东西放在一个时,我们也把另一个(键和值反转)放在另一个中:
nameToID.put(name, id);
idToName.put(id, name);
Run Code Online (Sandbox Code Playgroud)
我们遇到了这个应用程序的内存问题.看来这里有很多重复.有没有办法让这个内存更有效?我们可以使用一些单一的结构?我意识到这可能是以时间效率为代价的,所以我对权衡利弊感兴趣.
这正是Guava 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"
Run Code Online (Sandbox Code Playgroud)
(披露:我向番石榴捐款.)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |