V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

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

  •  
  •   guyeuro · 2017-09-08 12:05:37 +08:00 · 2448 次点击
    这是一个创建于 2662 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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();
    
    3 条回复    2017-09-09 11:39:06 +08:00
    yidinghe
        1
    yidinghe  
       2017-09-08 12:24:22 +08:00 via Android
    因为 list 是有序的,set 是无序的。另外不要强制转换,而应该构造新的 list 或 set。
    canbingzt
        2
    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
        3
    SoloCompany  
       2017-09-09 11:39:06 +08:00
    你肯定弄错了,Map.values 不可能是 Set, BiMap.values 才是 Set
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2883 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:56 · PVG 20:56 · LAX 04:56 · JFK 07:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.