遍历Map的value有几种方法,很大一部分人能直接答出来三种,真的是三种么?到这里可能有些朋友会说难道还有第四种?哈哈,没错就是三种,分别是先获取到key的Set:map.keySet(),然后通过key去获取value;直接获取到values集合的方法:map.values();以及最后的entrySet()方法。
Map<String,String> map = new HashMap<>();
Set<Map.Entry<String,String>> s = map.entrySet();
for (Entry<String, String> entry : s) {
entry.getKey();
entry.getValue();
}
今天给大家直接讲解一下entrySet()方法的内部实现。
首先找到了Map的内部,看到了这个方法的定义:
Set<Map.Entry<K, V>> entrySet();
通过此方法,直接可以发现Entry是Map的一个内部类或者内部接口,再往下看就发现Entry是Map内部直接封装的一个内部接口,且内部实现如下:
interface Entry<K,V> {
K getKey();
V getValue();
}
内部方法不多,不过我们主要看这两个方法,分别是获取key和获取value的方法。如果稍微对HashMap有一点了解的话,知道HashMap是基于链表数据结构实现的。不知道也没关系,我们可以去内部看一下:
打开HashMap内部实现后,发现其内部封装的有一个
transient Node<K,V>[] table;
那么很明显,Java基础部分大家都有学过Node,是一个节点对象,相对应的数据结构就是链表,那么一个链表类型的数组,这个数据结构就叫哈希表了。我们继续去看Node内部的实现:
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
Node(int hash, K key, V value, Node<K,V> next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
public final K getKey() { return key; }
public final V getValue() { return value; }
public final String toString() { return key + "=" + value; }
public final int hashCode() {
return Objects.hashCode(key) ^ Objects.hashCode(value);
}
public final V setValue(V newValue) {
V oldValue = value;
value = newValue;
return oldValue;
}
}
可以很清晰的发现,Node对象是实现了Entry接口的,并且在重写的getKey和getValue方法中,获取到了存在根本的key和value值。
总结:说到底就是最终存放数据的Node类实现了Entry接口,并重写了Entry接口中的getKey和getValue方法,并将内部封装的数据通过这两个方法对外进行暴露,使外部可以进行访问。
中间名单如下:
一等奖得主:
放不下的寂寞(Q名)
二等奖得主:
天下第一帅(Q名)
草莓有毒(Q名)
洛羽(Q名)
周通(微信名)
NO.liu(微信名)
三等奖得主:
SimGg(微信名)
龍爺(微信名)
1个狠oK的男人(Q名)
兄弟你裤缝开着(Q名)
快男波波(Q名)
琪哲(微信名)
Heartbeats(微信名)
you my lady(Q名)
百度搜不到你,只有进搜狗ㄣ(Q名)
残缺尔的爱(Q名)
小爷有小爷的独特范 #(Q名)
Hiр-Hop(微信名)
Mine(微信名)
远离喧嚣世界(微信名)
ALan(微信名)
回眸一笑的洒脱(Q空间名)
、Dior,(微信名)
殇范玮琪的饭(Q名)
流浪狗待收留(微信名)
Charles(Q名)
【请以上同学主动联系辛老师965367626或者曹老师1409615756领取奖品】
报名获取手机的同学,不在此公布。可以直接与相关老师联系。
【更多精彩内容】
想学习必须掌握的9大方法
威哥的真情告白
Java面试题集锦
学编程不能不学项目【53个优秀项目集锦】
如果你已经厌倦了迷茫却不知所从的日子
如果你是一位想改变生活的有志青年
如果你想让威哥帮助你,请在公众号回复:
QQ:XXXXXX 我要报名
获取更多视频干货,点击“阅读原文”