Puz*_*led 4 java collections multimap guava
我正在使用番石榴的谷歌收藏库,我相信最新的版本.
我发现,一旦我从地图中移除了给定K值的最终(K,V)对,地图仍然包含K的条目,其中V是空集合.
我宁愿让地图不包含这个条目.为什么我不能删除它?或者,如果我可以,怎么样?
这可能是我错过的简单事情.这是一个代码示例.谢谢.
// A plain ordinary map.
Map<Integer, Integer> hm = new HashMap<Integer, Integer>();
hm.put(1, 2);
hm.remove(1);
// Value of key 1 in HashMap: null
System.out.println("Value of key 1 in HashMap: " + hm.get(1));
// A list multimap.
ListMultimap<Integer, Integer> lmm = ArrayListMultimap.<Integer, Integer> create();
lmm.put(1, 2);
lmm.remove(1, 2);
// Value of key 1 in ArrayListMultiMap: []
System.out.println("Value of key 1 in ArrayListMultiMap: " + lmm.get(1));
// A set multimap.
SetMultimap<Integer, Integer> smm = HashMultimap.<Integer, Integer> create();
smm.put(1, 2);
smm.remove(1, 2);
// Value of key 1 in HashMultimap: []
System.out.println("Value of key 1 in HashMultimap: " + smm.get(1));
Run Code Online (Sandbox Code Playgroud)
实际上,当您删除多图中某个键的最后一个值时,该键将从地图中删除.例如,参见'containsKey'的行为
System.out.println("ListMultimap contains key 1? " + lmm.containsKey(1));
Run Code Online (Sandbox Code Playgroud)
但是,当您从multimap获取值时,如果没有与该键关联的集合,它将返回一个空集合,请参阅AbstractMultimap中get的实现:
/**
* {@inheritDoc}
*
* <p>The returned collection is not serializable.
*/
@Override
public Collection<V> get(@Nullable K key) {
Collection<V> collection = map.get(key);
if (collection == null) {
collection = createCollection(key);
}
return wrapCollection(key, collection);
}
Run Code Online (Sandbox Code Playgroud)
要从中完全删除基础条目Multimap,您需要使用Map视图:
multimap.asMap().remove(key);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5558 次 |
| 最近记录: |