使键和值相同的意义是什么? JVM是否会优化内存并使它们仅在堆中一个副本?
答案 0 :(得分:2)
Map<T, T>
通常用于实现与备份映射具有相同属性的Set<T>
。例如。如果映射是线程安全的,则对应的集合也将是线程安全的。如果地图可导航,则集合也将可导航,等等。
同时保留键和值部分中的元素提供了一种获取存储在集合中的确切实例的方法。这是此模式的一些典型用例。
获取规范对象。想像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();
}
据我了解,HBase中并发NavigableMap<Cell, Cell>
用于实现具有上述属性的并发可导航单元集。
请注意,此类映射中的键和值只是对同一对象的两个引用。对象本身不会被复制。