读书人

HashMap里的keySet()方法原码看不懂

发布时间: 2012-05-11 12:55:37 作者: rapoo

HashMap里的keySet()方法原码看不懂,请解释一下。谢谢。

Java code
    public Set<K> keySet() {        Set<K> ks = keySet;             [color=#0000FF]//这个keySet是什么? 没有定义啊?[/color]        return (ks != null ? ks : (keySet = new KeySet()));    }

keySet 与方法名相同,在整个HashMap里别处没有定义。

[解决办法]
父类AbstractMap
Java code
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 contains(Object k) {            return AbstractMap.this.containsKey(k);        }        };    }    return keySet;    }
[解决办法]
一定是存在的变量了啦,好好找找。

读书人网 >J2SE开发

热点推荐