java.lang.ClassCastException:[我无法转换为java.lang.Integer

时间:2016-11-05 11:06:12

标签: java

public class Solution {
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int l1=Integer.parseInt(br.readLine());int count=0;
        String l2=br.readLine();
        String[] a=l2.split(" ");int[] no=new int[l1];
        for (int i=0;i<l1;i++) {
            no[i]=Integer.parseInt(a[i]);
        }
        List list=Arrays.asList(no);
        Set<Integer> set=new LinkedHashSet<Integer>(list);
        ***for (int integer : set) {***
        count=Math.max(count, Collections.frequency(list, integer));
        }
    }
}

我在代码的突出显示部分得到java.lang.ClassCastException: [I cannot be cast to java.lang.Integer at Solution.main(Solution.java:23)。这是什么原因?

2 个答案:

答案 0 :(得分:2)

您正尝试从原始整数数组初始化一个集合。当你这样做时

List list=Arrays.asList(no);

因为List是无类型的,所以构造一个整数数组列表;这绝对不是你想要的,因为你需要List<Integer>

幸运的是,这很容易解决:将no的声明更改为

Integer[] no=new Integer[l1];

并按如下方式构建list

List<Integer> list = Arrays.asList(no);

其他一切都应该可以正常工作。

答案 1 :(得分:0)

Set<Integer> set=new LinkedHashSet<Integer>(list);会产生未经检查的警告。这掩盖了list的正确通用类型为List<int[]>,因此set不包含Integers,而是包含int的数组。 ClassCastException报告的内容:int[](简称为[I)无法投放到Integer

修复此代码的最简单方法是将no声明为Integer[],而不是int[]。在这种情况下,Arrays.asList将返回正确输入的List<Integer>