public Set<K> keySet() {
        Set<K> ks = keySet;             //这个keySet是什么? 没有定义啊?
        return (ks != null ? ks : (keySet = new KeySet()));
    }
keySet 与方法名相同,在整个HashMap里别处没有定义。

解决方案 »

  1.   

    父类AbstractMap
    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;
        }
      

  2.   

    如果你用的是eclipse,按下ctrl+变量名,就能索引过去,再说sun不会犯这种错误,否则通不过编译的。
      

  3.   

    我以为有种特殊的方法,我一直不知道呢. 再发个帖子帮解释下,native方法。
      

  4.   

    java native 没仔细关注过,应该就是用java调用本地语言,比如c,c++之类的语言写的代码。更体现了java的跨平台性。网上还是有很多相关资料的。