toppic
当前位置: 首页> 科幻小说小说> 详解Map的value方法(内附双11活动中奖名单)

详解Map的value方法(内附双11活动中奖名单)

2020-11-12 11:41:58

【威哥说】 双11单身节为大家准备的小活动已经与13日结束,获奖名单公布在本文最下端,获奖的小伙伴,速度拿起你的电话拨打010-56258715,或者加上美女曹老师(1409615756)或者帅哥辛老师(965367626),在线沟通,以便早日拿到你的奖品哟。


    遍历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  我要报名


获取更多视频干货,点击“阅读原文”



友情链接