guyeuro
V2EX  ›  问与答

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

  •  
  •   guyeuro · Sep 8, 2017 · 3093 views
    This topic created in 3196 days ago, the information mentioned may be changed or developed.

    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 replies    2017-09-09 11:39:06 +08:00
    yidinghe
        1
    yidinghe  
       Sep 8, 2017 via Android
    因为 list 是有序的,set 是无序的。另外不要强制转换,而应该构造新的 list 或 set。
    canbingzt
        2
    canbingzt  
       Sep 8, 2017
    如果是 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  
       Sep 9, 2017
    你肯定弄错了,Map.values 不可能是 Set, BiMap.values 才是 Set
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1180 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 17:52 · PVG 01:52 · LAX 10:52 · JFK 13:52
    ♥ Do have faith in what you're doing.