Java中AbstractMap的keySet()是怎么实现的?
黄舟
黄舟 2017-04-18 09:47:34
0
2
537

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;
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(2)
小葫芦

keySet의 구현도 간단하지 않습니다. 이 기사를 살펴보세요: http://www.cnblogs.com/dsj201...

PHPzhong

으아아아

entrySet().iterator() 구현 작성자는 실제로 배열과 연결된 목록인 HashMap의 구현을 살펴볼 수 있습니다. 저자가 이 두 가지 배열 구조를 이해했다면 이를 이해해야 합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!