java中的entrySet接口[重复]

Posted

技术标签:

【中文标题】java中的entrySet接口[重复]【英文标题】:entrySet interface in java [duplicate] 【发布时间】:2018-10-21 08:48:16 【问题描述】:
// Using entrySet() to get the entry's of the map
// m is previously created Map.

Set<Map.Entry<String,Integer>> s = m.entrySet();
for (Map.Entry<String, Integer> it: s)
 
    String str = it.getKey();
 

Map.Enty 只是接口。

接口没有方法getKey();的实现

为什么上面的代码有效?就像编译器如何知道getKey() 的行为一样?

【问题讨论】:

因为Node&lt;K,V&gt; in HashMap.java 实现了Map.Entry&lt;K,V&gt;,所以我不知道你在问什么。 有一个正在使用的Map.Entry 的实现。如果您使用调试器单步调试代码,您可能会找出哪个类,甚至可以单步调试该类的源代码。 所以你知道“接口”这个词,但显然你还没有研究它为什么存在以及如何使用它。 这是多态性。 “实际类型”和“表观类型”之间存在差异。简而言之,您正在阅读的代码处理的是明显的代码。任何接口的实现者都可以以这种方式使用。 为了打破你的世界,接口可以实现自 Java 8 以来的方法。 【参考方案1】:

如下代码所示:

static class Entry<K,V> implements Map.Entry<K,V>

这段代码来自HashMap,如果我们放一个新的K-V Entry,HashMap会创建一个HashMap.Entry的新实例:

void createEntry(int hash, K key, V value, int bucketIndex) 
    Entry<K,V> e = table[bucketIndex];
    table[bucketIndex] = new Entry<>(hash, key, value, e);
    size++;

因此,for-each 循环中的每个 it 变量都是 HashMap.Entry class 的实例,它实现了 Map.Entry interface

【讨论】:

嗨,我还是很困惑。什么点。方法?喜欢 Map.Entry? Interface Map.Entry 所有已知的实现类:AbstractMap.SimpleEntry、AbstractMap.SimpleImmutableEntry 引自docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html 本网站未提及Entry 类实现Map.Entry 您可以在docs.oracle.com/javase/tutorial/java/package/namingpkgs.html和docs.oracle.com/javase/tutorial/java/javaOO/nested.html找到答案 并阅读oracle写的教程:docs.oracle.com/javase/tutorial/java/index.html

以上是关于java中的entrySet接口[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Map.Entry说明

java笔记java中的Map.Entry和Map.entrySet()方法的使用

Map.Entry遍历Map

Java中的Map 笔记

Java :Map.Entry与entrySet应用

29.Map的Entry接口(内部类接口)