整数对象类型转换

时间:2018-01-16 20:57:03

标签: java hashmap

我有一个代码不能正常工作,因为我希望它工作..我正在将HashMap转换为整数数组..但是它显示错误:Object [] Integer [] type mismatch .. 这是代码:

HashMap<String,Integer> hm = new HashMap<String,Integer>(); 
hm.put((s.charAt(i) + "") , (hm.get(s.charAt(i)+""))+1); // i is for loop
ArrayList<Integer> alist = new ArrayList<Integer>(hm.values());
Integer[] i = alist.toArray(); // error at this line

我必须使用for循环从ArrayList创建一个整数数组..

for(int k=0;k<alist.length;k++)
{
 i[k] = (Integer) alist[k];
}

我检查了alist.get(o)instanceof Integer,它返回true表示它是一个Integer对象..但它仍然在代码的第4行显示错误..

提前致谢。

1 个答案:

答案 0 :(得分:3)

List.toArray()已超载:

您使用了哪一个:

  

Object [] toArray();

和:

  

T [] toArray(T [] a);

使用最后一个,将List转换为List的泛型类型的数组,而不是Object的数组。

Integer[] i = alist.toArray(new Integer[alist.size()]); 

作为旁注,您可以通过界面编程,使用菱形运算符并保​​留不需要的对象来改进代码。
请注意toArray()来自Collection接口,而AbstractCollection是大多数具体Collection子类的基类,它定义了toArray()的实现。

所以你可以写:

Map<String,Integer> hm = new HashMap<>();  
hm.put((s.charAt(i) + "") , (hm.get(s.charAt(i)+""))+1); // i is for loop
Integer[] i = hm.values().toArray(new Integer[hm.values().size()]);