在地图界面中
Collection<V> values();
为什么这个函数不返回 Set 类似于entrySet()
and keySet()
?
谢谢。
在映射中,键是唯一的,但可以映射到相同的值。
换一种方式:
这些值不一定是唯一的,因此不能在不丢失重复项的情况下存储在集合中。
另一方面,键和整体是独一无二的。
因为,Set
s 不允许重复,并且您Map
可以有两个键映射到相同的值。Map
只要求它的键是唯一的,而不是它的值。
Map 的 keyset 是 Set,而 values 是 Collection:
public interface Map<K,V> {
// Basic operations
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
// Bulk operations
void putAll(Map<? extends K, ? extends V> m);
void clear();
// Collection Views
public Set<K> keySet();
public Collection<V> values();
至于为什么 keyset 是一个 Set,而重视一个 Collection,你在这里有你的答案:
values — Map 中包含的值的集合。这个集合不是一个集合,因为多个键可以映射到同一个值。
AMap
有一组唯一的键,每个键都映射到一个值。
ASet
包含一组唯一的值。根据它的合同,它不能包含重复项。
所以,让我们从一个Map
看起来像这样的开始:
final Map<String, String> map = new HashMap<>();
map.put("ONE", "TEST");
map.put("TWO", "TEST");
所以keySet
返回a Set
。ONE, TWO
但是值是TEST, TEST
,这些不是唯一的,因此不能放入Set
.