让键和值相同有什么意义? JVM 会优化内存并使它们在堆中仅一份吗?
最佳答案
Map<T, T>
通常用于实现Set<T>
具有与背景图相同的属性。例如。如果映射是线程安全的,则相应的集合也将是线程安全的。如果 map 可导航,则该集合也将可导航,等等。
在键和值部分中保留元素提供了一种获取存储在集合中的精确实例的方法。以下是此模式的一些典型用例。
获取规范对象。想想类似
String.intern()
的东西但对于任意对象。实习可以通过Map<T, T>
轻松实现:T existing = map.putIfAbsent(obj, obj); return existing != null ? existing : obj;
将可变对象存储在集合中。如果要修改现有对象,则由
Map<T, T>
支持的集合将再次救援:T existing = map.get(key); if (existing != null) { existing.mutate(); }
据我了解,并发 NavigableMap<Cell, Cell>
在 HBase 中用于实现具有上述属性的并发可导航单元集。
请注意,此类映射中的键和值只是对同一对象的两个引用。对象本身不会被复制。
关于java - 为什么HBase使用NavigableMap<Cell, Cell>来存储Cell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920369/