Initialize ArrayList <ArrayList <Integer>>
I met the problem as follows:
When I initialize ArrayList<ArrayList<Integer>> , the codes are:
ArrayList<ArrayList<Integer>> group = new ArrayList<ArrayList<Integer>>(); group.add((ArrayList<Integer>) Arrays.asList(1, 2, 3)); group.add((ArrayList<Integer>) Arrays.asList(4, 5, 6)); group.add((ArrayList<Integer>) Arrays.asList(7, 8, 9)); for (ArrayList<Integer> list : group) { for (Integer i : list) { System.out.print(i+" "); } System.out.println(); } Although the codes can be compiled successfully, I still get an exception on the console:
An exception in the main thread java.lang.ClassCastException: java.util.Arrays $ ArrayList cannot be thrown in java.util.ArrayList in Solution.main (Solution.java:49)
Thanks for the help!
Arrays.asList does not return java.util.ArrayList . It returns an instance of a class called ArrayList , by coincidence, but it is not java.util.ArrayList .
If you don't need it to really be an ArrayList<ArrayList<Integer>> , I would just change it to:
List<List<Integer>> group = new ArrayList<>(); group.add(Arrays.asList(1, 2, 3)); group.add(Arrays.asList(4, 5, 6)); group.add(Arrays.asList(7, 8, 9)); for (List<Integer> list : group) { ... } If you need an ArrayList<ArrayList<...>> - or if you need to add to the internal lists, even if you do not need them with the static type ArrayList - then you will need to create a new ArrayList for each list:
group.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3))); // etc The return of Arrays.asList not java.util.ArrayList ; java.util.Arrays$ArrayList is a separate class nested in Arrays , even if it is a List .
If you must have an ArrayList , then create another ArrayList yourself, using the returned List from Arrays.asList instead of casting, for example:
group.add(new ArrayList<Integer>( Arrays.asList(1, 2, 3) )); Arrays.asList returns an instance of the nested static type java.util.Arrays.ArrayList , which is different from java.util.ArrayList . You can avoid this problem by programming the List interface (which is also implemented by java.util.Arrays.ArrayList ) and without unnecessary casts:
List<List<Integer>> group = new ArrayList<List<Integer>>(); group.add(Arrays.asList(1, 2, 3)); group.add(Arrays.asList(4, 5, 6)); group.add(Arrays.asList(7, 8, 9)); for (List<Integer> list : group) { for (Integer i : list) { System.out.print(i+" "); } System.out.println(); } group.add(new ArrayList<Integer>((Arrays.asList(1, 2, 3)))); group.add(new ArrayList<Integer>((Arrays.asList(4, 5, 6)))); group.add(new ArrayList<Integer>((Arrays.asList(7, 8, 9)))); for (ArrayList<Integer> arrayList : group) { for (Integer integer : arrayList) { System.out.println(integer); } } Please read this code. This can help you achieve your requirements.