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<K,V>
in HashMap.java
实现了Map.Entry<K,V>
,所以我不知道你在问什么。
有一个正在使用的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以上是关于java中的entrySet接口[重复]的主要内容,如果未能解决你的问题,请参考以下文章