账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    jdk1.8 hashMap是如何来维护entrySet的
    30
    0

    1.经过翻看hashMap的源码,发现并没有主动地去维护entrySet,比如put的时候去存值或者调用entrySet()去维护值,那entryset的值从哪而来呢?

    2.hashMap源码

    public Set<Map.Entry<K,V>> entrySet() {
            Set<Map.Entry<K,V>> es;
            return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
        }
    final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
            public final int size()                 { return size; }
            public final void clear()               { HashMap.this.clear(); }
            public final Iterator<Map.Entry<K,V>> iterator() {
                return new EntryIterator();
            }
        }

    3.本人的测试例子:

            Map map = new HashMap();
            map.put(1, 1);
            map.put(2, 2);
            Set set = map.entrySet();
            Iterator iterator = set.iterator();

    debug发现这个时候set已经有值了,很是费解。iterator也在调用next方法之前就能看到值。

    //iterator源码
    public final Iterator<Map.Entry<K,V>> iterator() {
                return new EntryIterator();
            }
     final class EntryIterator extends HashIterator
            implements Iterator<Map.Entry<K,V>> {
            public final Map.Entry<K,V> next() { return nextNode(); }
        }

    4.感觉自己说的好混乱,再来阐述一遍问题,entrySet还有它的iterator是怎么维护的?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部