java.lang.ClassCastException: - Arrays.asList()
java.lang.ClassCastException: - Arrays.asList()
Exception in thread "main" java.lang.ClassCastException:
java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList at BinarySearch.main(BinarySearch.java:14)
下面是我的代码-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class BinarySearch{
public static void main(String s[]) throws InterruptedException{
int result=-1;
Integer[] array ={34,67,12,32,07,11,25} ;
ArrayList<Integer> list=new ArrayList<Integer>();
list=(ArrayList<Integer>) Arrays.asList(array);
for(Integer i:list)
System.out.println(i);
Collections.sort(list);
for(Integer i:list)
System.out.println(i);
int search=new Scanner(System.in).nextInt();
int low=0;
int max=list.size()-1;
int middle=(low+max)/2;
System.out.println(low+" - "+middle+" - "+max );
while(low<=max){
if(list.get(middle)== search){
result=middle;
break;
}else if(list.get(middle)> search){
max=middle-1;
}else{
low=middle+1;
}
middle=(low+max)/2;
System.out.println(low+" - "+middle+" - "+max );
Thread.currentThread().sleep(1000);
}
if(result==-1)
System.out.println("not Found!");
else System.out.println("Element "+search+" found at position- "+result);
}
}
如果我探索上面的问题-
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(array));
List<Integer> list2 = Arrays.asList(array);
List<Integer> list3 = new ArrayList<Integer>(list2);
我说得对吗?
list1 和 list3 有行为,而 list2 是不可变的。
List
由 Arrays.asList(...)
is not a java.util.ArrayList
返回,因此如果您尝试将其转换为 ArrayList
,您会得到 ClassCastException
,就像您在此处所做的那样:
list=(ArrayList<Integer>) Arrays.asList(array);
解决方案:不要将其转换为 ArrayList
。请改用 List
界面。
List<Integer> list = Arrays.asList(array);
Arrays.asList()
returns List
,不是 ArrayList
.
变化:
ArrayList<Integer> list = new ArrayList<Integer>();
list = (ArrayList<Integer>) Arrays.asList(array);
至
List<Integer> list = Arrays.asList(array);
Arrays.asList
不 return java.util.ArrayList
.
使用 List
接口而不是特定的实现:
List<Integer> list = Arrays.asList(array);
或者创建一个 java.util.ArrayList
实例并将由 Arrays.asList
编辑的 List
return 传递给它的构造函数:
ArrayList<Integer> list = new ArrayList<Integer> (Arrays.asList(array));
Exception in thread "main" java.lang.ClassCastException:
java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList at BinarySearch.main(BinarySearch.java:14)
下面是我的代码-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class BinarySearch{
public static void main(String s[]) throws InterruptedException{
int result=-1;
Integer[] array ={34,67,12,32,07,11,25} ;
ArrayList<Integer> list=new ArrayList<Integer>();
list=(ArrayList<Integer>) Arrays.asList(array);
for(Integer i:list)
System.out.println(i);
Collections.sort(list);
for(Integer i:list)
System.out.println(i);
int search=new Scanner(System.in).nextInt();
int low=0;
int max=list.size()-1;
int middle=(low+max)/2;
System.out.println(low+" - "+middle+" - "+max );
while(low<=max){
if(list.get(middle)== search){
result=middle;
break;
}else if(list.get(middle)> search){
max=middle-1;
}else{
low=middle+1;
}
middle=(low+max)/2;
System.out.println(low+" - "+middle+" - "+max );
Thread.currentThread().sleep(1000);
}
if(result==-1)
System.out.println("not Found!");
else System.out.println("Element "+search+" found at position- "+result);
}
}
如果我探索上面的问题-
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(array));
List<Integer> list2 = Arrays.asList(array);
List<Integer> list3 = new ArrayList<Integer>(list2);
我说得对吗?
list1 和 list3 有行为,而 list2 是不可变的。
List
由 Arrays.asList(...)
is not a java.util.ArrayList
返回,因此如果您尝试将其转换为 ArrayList
,您会得到 ClassCastException
,就像您在此处所做的那样:
list=(ArrayList<Integer>) Arrays.asList(array);
解决方案:不要将其转换为 ArrayList
。请改用 List
界面。
List<Integer> list = Arrays.asList(array);
Arrays.asList()
returns List
,不是 ArrayList
.
变化:
ArrayList<Integer> list = new ArrayList<Integer>();
list = (ArrayList<Integer>) Arrays.asList(array);
至
List<Integer> list = Arrays.asList(array);
Arrays.asList
不 return java.util.ArrayList
.
使用 List
接口而不是特定的实现:
List<Integer> list = Arrays.asList(array);
或者创建一个 java.util.ArrayList
实例并将由 Arrays.asList
编辑的 List
return 传递给它的构造函数:
ArrayList<Integer> list = new ArrayList<Integer> (Arrays.asList(array));