15

Possible Duplicate:
How to convert an ArrayList containing Integers to primitive int array?

I tried the code below, but it does not work. Do I have to make a loop copy the ArrayList into an array ?

int[]intArray = (int[]) integerArrayList.toArray();
Community
  • 1
  • 1
Apple Grinder
  • 3,573
  • 7
  • 22
  • 35

4 Answers4

28

If you want primitive type array, you can use Apache Commons ArrayUtils#toPrimitive method to get primitive array from wrapper array: -

public static int[] toPrimitive(Integer[] array)

You can use it like this: -

int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());

Or, you can use the 1-arg version of toArray method, that takes an array and returns the array of that type only. That way, you won't have to the typecasting.

List<Integer> myList = new ArrayList<Integer>();
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]);

// If you want a `primitive` type array
int[] arr = ArrayUtils.toPrimitive(wrapperArr);

However, if you are Ok with the wrapper type array (Which certainly will not trouble you), then you don't need to do that last step.


Also, you can also create a primitive array, without having to create that intermediate Wrapper type array. For that you would have to write it through loop: -

int[] arr = new int[myList.size()];

for(int i = 0; i < myList.size(); i++) {
    if (myList.get(i) != null) {
        arr[i] = myList.get(i);
    }
}
Rohit Jain
  • 209,639
  • 45
  • 409
  • 525
9

You'll need to iterate through and copy it.

int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = integerArrayList.get(i);
}
FThompson
  • 28,352
  • 13
  • 60
  • 93
2

You don't need the loop, and you don't need typecast to int. Just change the declaration of int to Integer. Other code will use auto unboxing to int elements if required.

Look at autoboxing

// List adapter for primitive int array
public static List<Integer> asList(final int[] a) {
    return new AbstractList<Integer>() {
        public Integer get(int i) { return a[i]; }
        // Throws NullPointerException if val == null
        public Integer set(int i, Integer val) {
            Integer oldVal = a[i];
            a[i] = val;
            return oldVal;
        }
        public int size() { return a.length; }
    };

}

Roman C
  • 49,761
  • 33
  • 66
  • 176
1

you should be using arraylist's toArray(T[] arr) method instead of arrayList's toArray() with no args. refer to that method signature here.

do it like below:

   ArrayList<Integer> al = new ArrayList<>();
        al.add(2);
        al.add(3);
        Integer[] arr = al.toArray(new Integer[al.size()]);
        System.out.println(arr.length);//returns 2
PermGenError
  • 45,977
  • 8
  • 87
  • 106
  • 11
    This is incorrect as he is looking to create a primitive int array, not another array of Integer. – JamesB Oct 27 '12 at 10:42