1

Exception in thread "main" java.lang.ClassCastException:

java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList at BinarySearch.main(BinarySearch.java:14)

below is my code-

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);

    }

}

If I explore above problem-

List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(array)); 
List<Integer> list2 = Arrays.asList(array);
List<Integer> list3 = new ArrayList<Integer>(list2);

am I right?

list1 and list3 have have behavior while list2 is immutable.

3 Answers3

3

Arrays.asList() returns List, not an ArrayList.

Change:

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

to

List<Integer> list = Arrays.asList(array);
Konstantin Yovkov
  • 62,134
  • 8
  • 100
  • 147
3

Arrays.asList doesn't return a java.util.ArrayList.

Either use the List interface instead of a specific implementation :

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

Or create a java.util.ArrayList instance and pass the List returned by Arrays.asList to its constructor :

       ArrayList<Integer> list = new ArrayList<Integer> (Arrays.asList(array));
Eran
  • 387,369
  • 54
  • 702
  • 768
2

The List that is returned by Arrays.asList(...) is not a java.util.ArrayList, so you get a ClassCastException if you try to cast it to ArrayList, as you are doing here:

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

Solution: Don't cast it to ArrayList. Use the List interface instead.

List<Integer> list = Arrays.asList(array);
Jesper
  • 202,709
  • 46
  • 318
  • 350