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();
1
yidinghe 2017-09-08 12:24:22 +08:00 via Android
因为 list 是有序的,set 是无序的。另外不要强制转换,而应该构造新的 list 或 set。
|
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 这一块的实现是一样的 |
3
SoloCompany 2017-09-09 11:39:06 +08:00
你肯定弄错了,Map.values 不可能是 Set, BiMap.values 才是 Set
|