2

マップ インターフェイスで

  Collection<V> values();

entrySet()この関数がand と同様に Set を返さないのはなぜkeySet()ですか?

ありがとう。

4

4 に答える 4

1

マップのキーセットはセットですが、値はコレクションです。

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();

そして、なぜキーセットがセットであり、値がコレクションであるかについては、ここに答えがあります:

values — マップに含まれる値のコレクション。複数のキーが同じ値にマップされる可能性があるため、この Collection は Set ではありません。

于 2013-08-10T12:03:54.540 に答える
1

Mapは一意のキー セットがあり、各キーは値にマップされます。

ASetには一意の値のセットが含まれています。契約により、重複を含めることはできません。

それでは、Map次のようなa から始めましょう。

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

したがって、は の aをkeySet返します。しかし、値は です。これらは一意ではないため、 に入れることはできません。SetONE, TWOTEST, TESTSet

于 2013-08-10T12:04:14.107 に答える