java map 源代码_java – JDK Hashmap源代码 – 匿名内部类和抽...

问题

我试图了解Sun如何实现HashMap类的entrySet,keySet和values方法,但我遇到的代码对我来说没有意义.

我从概念上理解这些方法返回的视图直接链接到HashMap中的map.entry列表,并且它们使用自己的迭代器(引用中央HashMap迭代器)来完成大部分工作.我的问题在于理解这些视图究竟是如何被实例化的(因为它们不是副本,而是位于实际HashMap列表之上的东西).

参考

这是给我带来麻烦的一个片段:

157: private transient Set> entries;

594: public Set> entrySet()

595: {

596: if (entries == null)

597: // Create an AbstractSet with custom implementations of those methods

598: // that can be overridden easily and efficiently.

599: entries = new AbstractSet>()

600: {

601: public int size()

602: {

603: return size;

604: }

605:

606: public Iterator> iterator()

607: {

608: // Cannot create the iterator directly, because of LinkedHashMap.

609: return HashMap.this.iterator(ENTRIES);

610: }

611:

612: public void clear()

613: {

614: HashMap.this.clear();

615: }

616:

617: public boolean contains(Object o)

618: {

619: return getEntry(o) != null;

620: }

621:

622: public boolean remove(Object o)

623: {

624: HashEntry e = getEntry(o);

625: if (e != null)

626: {

627: HashMap.this.remove(e.key);

628: return true;

629: }

630: return false;

631: }

632: };

633: return entries;

634: }

问题

>在第599行,此代码实例化AbstractSet类.这怎么可能?我试图自己重新创建它,但我得到了预期的编译错误.

>我假设第601,606,612,617和622行中的公共方法是匿名内部类?我之前从未使用过这个功能所以我不知道它是如何工作的,我在网上找到的唯一例子相当简单(主要涉及Swing).我必须假设第599行与匿名类直接相关,但我不遵循如何.

如果有人能向我解释,我将非常感激!谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值