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

nmyangym 2012-05-10 10:22:34
 
public Set<K> keySet() {
Set<K> ks = keySet; //这个keySet是什么? 没有定义啊?
return (ks != null ? ks : (keySet = new KeySet()));
}

keySet 与方法名相同,在整个HashMap里别处没有定义。
...全文
109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdojqy1122 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
我以为有种特殊的方法,我一直不知道呢. 再发个帖子帮解释下,native方法。
[/Quote]
java native 没仔细关注过,应该就是用java调用本地语言,比如c,c++之类的语言写的代码。更体现了java的跨平台性。网上还是有很多相关资料的。
nmyangym 2012-05-10
  • 打赏
  • 举报
回复
我以为有种特殊的方法,我一直不知道呢. 再发个帖子帮解释下,native方法。
sdojqy1122 2012-05-10
  • 打赏
  • 举报
回复
如果你用的是eclipse,按下ctrl+变量名,就能索引过去,再说sun不会犯这种错误,否则通不过编译的。
nmyangym 2012-05-10
  • 打赏
  • 举报
回复
是了,犯了一个很愚蠢的错误.谢谢楼上2位!
李狗蛋52635 2012-05-10
  • 打赏
  • 举报
回复
一定是存在的变量了啦,好好找找。
sdojqy1122 2012-05-10
  • 打赏
  • 举报
回复
父类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;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧