【问题标题】:java.lang.ClassCastException: - Arrays.asList() [duplicate]java.lang.ClassCastException:-Arrays.asList() [重复]
【发布时间】:2023-03-17 10:25:01
【问题描述】:

线程“主”java.lang.ClassCastException 中的异常:

java.util.Arrays$ArrayList 不能在 BinarySearch.main(BinarySearch.java:14) 处转换​​为 java.util.ArrayList

下面是我的代码-

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 是不可变的。

【问题讨论】:

    标签: java arrays collections classcastexception


    【解决方案1】:

    Arrays.asList 不返回 java.util.ArrayList

    要么使用List 接口而不是特定的实现:

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

    或者创建一个java.util.ArrayList 实例并将Arrays.asList 返回的List 传递给它的构造函数:

           ArrayList<Integer> list = new ArrayList<Integer> (Arrays.asList(array));
    

    【讨论】:

      【解决方案2】:

      Arrays.asList() 返回List,而不是ArrayList

      变化:

      ArrayList<Integer> list = new ArrayList<Integer>();
      list = (ArrayList<Integer>) Arrays.asList(array);
      

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

      【讨论】:

      • 我建议不要创建ArrayList,因为它是一种浪费的实例化。
      • 第二个例子为什么要创建一个空的ArrayList?
      【解决方案3】:

      Arrays.asList(...) 返回的List 不是java.util.ArrayList,因此如果您尝试将其转换为ArrayList,则会得到ClassCastException,就像您在此处所做的那样:

      list=(ArrayList<Integer>) Arrays.asList(array);
      

      解决方案:不要将其转换为 ArrayList。请改用List 接口。

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

      【讨论】:

        猜你喜欢
        • 2015-06-09
        • 2015-07-22
        • 2014-10-24
        • 1970-01-01
        • 2015-10-03
        • 2014-03-20
        • 2016-10-25
        • 2012-05-30
        • 2014-11-01
        相关资源
        最近更新 更多