2

在地图界面中

  Collection<V> values();

为什么这个函数不返回 Set 类似于entrySet()and keySet()

谢谢。

4

4 回答 4

6

在映射中,键是唯一的,但可以映射到相同的值。

换一种方式:

  • 这些值不一定是唯一的,因此不能在不丢失重复项的情况下存储在集合中。

  • 另一方面,键和整体是独一无二的。

于 2013-08-10T12:02:47.133 回答
1

因为,Sets 不允许重复,并且您Map可以有两个键映射到相同的值。Map只要求它的键是唯一的,而不是它的值。

于 2013-08-10T12:02:39.773 回答
1

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 中包含的值的集合。这个集合不是一个集合,因为多个键可以映射到同一个值。

于 2013-08-10T12:03:54.540 回答
1

AMap有一组唯一的键,每个键都映射到一个值。

ASet包含一组唯一的值。根据它的合同,它不能包含重复项。

所以,让我们从一个Map看起来像这样的开始:

final Map<String, String> map = new HashMap<>();
map.put("ONE", "TEST");
map.put("TWO", "TEST");

所以keySet返回a SetONE, TWO但是值是TEST, TEST,这些不是唯一的,因此不能放入Set.

于 2013-08-10T12:04:14.107 回答