Java 为什么迭代器中的返回值类型不是一个集合?

Java 为什么迭代器中的返回值类型不是一个集合?,java,collections,map,Java,Collections,Map,在地图界面中 Collection<V> values(); 集合值(); 为什么此函数不返回类似于entrySet()和keySet()的Set 谢谢。因为,设置不允许重复,并且您的映射可以有两个键映射到相同的值映射只要求其键是唯一的,而不要求其值是唯一的。在映射中,键是唯一的,但可以映射到相同的值。 换句话说: 这些值不一定是唯一的,因此不能在不丢失重复项的情况下存储在一个集合中 另一方面,键和实体是唯一的 映射的键集是一个集合,而值是一个集合: public inte

在地图界面中

  Collection<V> values();
集合值();
为什么此函数不返回类似于
entrySet()
keySet()
的Set


谢谢。

因为,
设置不允许重复,并且您的
映射可以有两个键映射到相同的值<代码>映射
只要求其键是唯一的,而不要求其值是唯一的。

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

换句话说:

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

  • 另一方面,键和实体是唯一的


映射的键集是一个集合,而值是一个集合:

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();
公共接口映射{
//基本操作
V输入(K键,V值);
V get(对象键);
V移除(对象键);
布尔containsKey(对象键);
布尔包含值(对象值);
int size();
布尔isEmpty();
//批量操作

void putAll(MapA
Map
有一组唯一的键,每个键都映射到一个值

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

因此,让我们从一个如下所示的
映射开始:

final Map<String, String> map = new HashMap<>();
map.put("ONE", "TEST");
map.put("TWO", "TEST");
final Map=new HashMap();
地图放置(“一”、“测试”);
地图放置(“两个”,“测试”);

因此,
键集
返回一个
,共
一个,两个
。但是值是
测试,测试
,它们不是唯一的,所以不能放入

反过来-为什么它会返回一个
?如果map有几次相同的值,你想知道它怎么办?@pshemoy我们的答案。还有,为什么keyset()返回Set。@因为Map中的所有键都是唯一的,所以Set是最适合返回它们的类型。