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)
。这是什么原因?
答案 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>
。