java - 补充 map

标签 java memory map

我们有这样两个互补 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/

相关文章:

android - 在 map View 上显示小部件

java - 如何在没有管理员的情况下在USB驱动器上安装android studio

c - 如何确保分配缓冲区在内存中

memory - (*T)(nil) 和 &T{}/new(T) 有什么区别?戈朗

Javascript 私有(private)方法——内存影响是什么?

java - 如何创建 String -> Array 的静态映射

perl - 在 Perl 中使用 map 仅在键存在时进行映射

java - 如何存储和搜索 'Banned Passwords'列表

java - 当分离的实体版本属性为空时,为什么 Hibernate 实体管理器执行插入而不是更新?

java - Selenium WebDriver 无法通过@FindBy 注释找到元素