栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么HashMap值不转换为List?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么HashMap值不转换为List?

TL; DR

List<V> al = new ArrayList<V>(hashMapVar.values());

说明

因为

HashMap#values()
返回a
java.util.Collection<V>
,而不能将a
Collection
转换为an
ArrayList
,所以得到
ClassCastException

我建议使用

ArrayList(Collection<? extends V>)
构造函数。此构造函数接受一个实现
Collection<? extendsV>
为参数的对象。
ClassCastException
通过这样的结果,您将不会得到
HashMap.values()

List<V> al = new ArrayList<V>(hashMapVar.values());

进一步研究Java API源代码

HashMap#values(): 检查源代码中的返回类型,并问自己,是否可以将a

java.util.Collection
强制转换为
java.util.ArrayList
?没有

public Collection<V> values() {    Collection<V> vs = values;    return (vs != null ? vs : (values = new Values()));}

ArrayList(Collection): 检查源中的参数类型。哪个参数是父类型的方法可以接受子类型吗?是

public ArrayList(Collection<? extends E> c) {    elementData = c.toArray();    size = elementData.length;    // c.toArray might (incorrectly) not return Object[] (see 6260652)    if (elementData.getClass() != Object[].class)        elementData = Arrays.copyOf(elementData, size, Object[].class);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号