Java : HashMap.values()返回的究竟是个啥?

2017-09-08 12:05:37 +08:00
 guyeuro

public Collection<v> values()

这个返回的是一个接口

不是一个具体的类

那究竟底层结构是啥?

譬如下面的类型转换(Set<string>)map.values(),有何要注意的地方,转成 Set 可以,但是 List 不可以?

    HashMap<String, String> map = new HashMap<>();
    map.put("one", "1");
    map.put("two","2");
    Collection<String> co = map.values();
    Set<String> co = (Set<String>)map.values();
2426 次点击
所在节点    问与答
3 条回复
yidinghe
2017-09-08 12:24:22 +08:00
因为 list 是有序的,set 是无序的。另外不要强制转换,而应该构造新的 list 或 set。
canbingzt
2017-09-08 14:01:38 +08:00
如果是 HashMap 的话,强转 Set 应该也是不行的,看下源码就知道了
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java
oracle jdk 和 openjdk 这一块的实现是一样的
SoloCompany
2017-09-09 11:39:06 +08:00
你肯定弄错了,Map.values 不可能是 Set, BiMap.values 才是 Set

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/389153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX