2016-11-05 123 views
1
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)。这是什么原因?java.lang.ClassCastException:[我不能转换为java.lang.Integer

+0

数组的[Arrays.asList()可能的重复](http://stackoverflow.com/questions/1248763/arrays-aslist-of-an-array) –

回答

2

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

List list=Arrays.asList(no); 

因为List是类型化的,你构建整数数组的列表;这绝对不是你正在寻找的,因为你需要List<Integer>

幸运的是,这是很容易解决:的no变更申报

Integer[] no=new Integer[l1]; 

,构建list如下:

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

一切应正常工作。

0

Set<Integer> set=new LinkedHashSet<Integer>(list);产生未经检查的警告。这掩盖了list的正确通用类型为List<int[]>,因此set不包含按照预期的Integers,而是包含int s的数组。这就是ClassCastExceptionint[](简称[I)不能投射到Integer

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

相关问题