热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HashMap.keySet()如何返回键的视图?

如何解决《HashMap.keySet()如何返回键的视图?》经验,为你挑选了1个好方法。



1> dimo414..:

    " 视图 "是一种对象,其数据由不同的对象支持,但以不同的方式提供.在这种情况下,它提供了一个"视图" Map的密钥作为Set.这对用户和性能都有很多好处.

    值得注意的是,由于它与支持类共享其数据,因此内存开销非常小 - 它不需要将所有密钥复制到一个全新的密钥中Set.此外,用户无需担心视图与支持结构不同步 - 添加和删除将立即通过视图显示.

    因为它KeySet是一个内部类,所以它可以访问其包含类(HashMap)的实例的字段.请注意HashMap.this代码段中的表示法.

    size()return size;是一个参考HashMapsize字段

    clear()HashMap.this.clear();通话HashMapclear()方法(它需要使用HashMap.this引用地图的clear()方法,而不是自己的)

    contains()代表HashMapcontainsKey()方法 - 这不需要HashMap.this因为KeySet没有碰撞containsKey()方法

    remove()同样代表他们HashMapremoveNode()

    如果它被声明为final static class KeySet它将是一个静态嵌套类,它不依赖于包含类的实例(它只是一种组织相关类的方式).在这种情况下KeySet需要一个显式HashMap字段,并且需要将有问题的地图传递给构造函数.内部类使这隐含(这是简洁的,但有时令人困惑).

    什么是告诉这个KeySet对象只保存MapKeys?

    要明确的是,没有这样的指示.一个KeySet实例传递地访问所有的领域和底层映射的方法.但是你的example(System.out.println("Key set values are: " + keyset);)是隐式调用keyset.toString(),(有意)没有实现它来返回map的值.因为KeySetextends AbstractSet(反过来又扩展AbstractCollection).toString()依赖于它KeySetiterator()实现,它实现了地图键的迭代器,而不是它的值.


推荐阅读
author-avatar
淇蒴_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有