Java中AbstractMap的keySet()是怎么实现的?

查看:75
本文介绍了Java中AbstractMap的keySet()是怎么实现的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

Java中的AbstractMap是个抽象类,提供了一个Map接口的基础实现。

其keySet()方法是返回map中所有的key的集合。

看了其源码,一头雾水。想知道它是怎么实现的?

源码如下:

transient volatile Set<K>        keySet = null;
transient volatile Collection<V> values = null;

public Set<K> keySet() {
    if (keySet == null) {
        keySet = new AbstractSet<K>() {
            public Iterator<K> iterator() {
                return new Iterator<K>() {
                    private Iterator<Entry<K,V>> i = entrySet().iterator();

                    public boolean hasNext() {
                        return i.hasNext();
                    }

                    public K next() {
                        return i.next().getKey();
                    }

                    public void remove() {
                        i.remove();
                    }
                };
            }

            public int size() {
                return AbstractMap.this.size();
            }

            public boolean isEmpty() {
                return AbstractMap.this.isEmpty();
            }

            public void clear() {
                AbstractMap.this.clear();
            }

            public boolean contains(Object k) {
                return AbstractMap.this.containsKey(k);
            }
        };
    }
    return keySet;
}

解决方案

keySet的实现也不简单啊,看看这篇文章:http://www.cnblogs.com/dsj201...

这篇关于Java中AbstractMap的keySet()是怎么实现的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆