我有一个代码不能正常工作,因为我希望它工作..我正在将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行显示错误..
提前致谢。
答案 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()]);