我正在将值放入形式的哈希图中,
Map<Long, Double> highLowValueMap=new HashMap<Long, Double>();
highLowValueMap.put(1l, 10.0);
highLowValueMap.put(2l, 20.0);
我想使用values()
map方法创建一个列表。
List<Double> valuesToMatch=new ArrayList<>();
valuesToMatch=(List<Double>) highLowValueMap.values();
要么
List<Double> valuesToMatch=(List<Double>) highLowValueMap.values();
但是,它将引发异常:
线程“主”中的异常java.lang.ClassCastException:
java.util.HashMap $ Values无法转换为java.util.List
但是它允许我将其传递给列表的创建:
List<Double> valuesToMatch = new ArrayList<Double>( highLowValueMap.values());
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<? extends V>
为参数的对象。ClassCastException
通过这样的结果,您将不会得到HashMap.values()
:
List<V> al = new ArrayList<V>(hashMapVar.values());
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);
}
我将值放入hashmap中, 我想通过使用map的方法创建一个列表。 但它允许我将其传递给列表的创建:
问题内容: 是的实现,并且的构造函数接收类型参数。那么,为什么必须对其进行显式转换? 问题答案: 这是因为extends(又实现了)。您尝试将其输入。因此,它是不兼容的。 您需要将字符串属性一一输入到地图中。 例如:
问题内容: 我有arrayList 我想像这样转换为ArrayList到HashMap 请帮助我如何转换为HashMap。 问题答案: 一般的方法是遍历,然后将值插入。示例如下:
问题内容: 嗨,我有一个csv叫做。我试图逐行读取csv并将值转换为哈希键值对。这是代码:- csv文件如下:- 当我运行此代码时,出现此错误:- 谁能帮助我修复代码并找出程序中的错误? 问题答案: 在字符串中,当你把它分解的第一次只包含如没有在这样就会导致异常 如果不需要1,2等。可以查看以下代码:
问题内容: 我发现一些代码我工作的地方的点被强制转换,因为它是传递给方法。 为什么要这样做? 我知道这个问题涉及重载的方法,并使用类型转换来确定要调用的方法的版本。 但是,如果不执行强制类型转换,如果使用空参数调用该方法,那么是否会重选带有其他类型的参数的重载方法呢?那么演员阵容还能完成什么呢? 问题答案: 如果 未 执行转换,则将选择 最具体的 版本。 可以是type 或type 的空引用。因此
问题内容: 我有一个子过程命令,输出一些字符,例如’\ xf1’。我正在尝试将其解码为utf8,但出现错误。 上面抛出: 当我使用’latin-1’时它可以工作,但是utf8也不能工作吗?我的理解是latin1是utf8的子集。 我在这里想念什么吗? 编辑: 问题答案: 您已经将Unicode与UTF-8混淆了。Latin-1是Unicode的子集,但不是UTF-8的子集。 避免像瘟疫一样思考各个