Why is indexOf failing to find the object?
I created an integer list and am trying to return the index of a specific value. The array is 3,8,2,5,1,4,7,6 and I want to return the indexOf(3), which should be 0.
I've tried the following in the Eclipse Java Scrapbook after importing java.util.*:
int[] A = {3,8,2,5,1,4,7,9};
Arrays.asList(A).indexOf(3)
I have also tried:
int[] A = {3,8,2,5,1,4,7,6};
ArrayList<Integer> l = new ArrayList(Arrays.asList(A));
l.indexOf(3)
Both are returning -1. Why? How to get this to work as expected?
Arrays.asList(A)
returns a List<int[]>
. This is because it expects an array of objects, not primitive types. Your options include:
- use
Integer[]
instead ofint[]
- inline the array, and let autoboxing take care of it;
Arrays.asList(3,8,2,5,1,4,7,9)
will work fine - use Guava's
Ints.asList(int...)
method to view the primitive array as aList<Integer>
. (Disclosure: I contribute to Guava.) - use Guava's
Ints.indexOf(int[], int)
, which works directly on primitive arrays.
It should be Integer[]
not int[]
in order to make it work.
Integer[] A = {3,8,2,5,1,4,7,9};
final int i = Arrays.asList(A).indexOf(3);
System.out.println("i = " + i); // prints '0'
Do it this way
Integer[] array = {3,8,2,5,1,4,7,9};
List<Integer> list = Arrays.asList(array);
System.out.println(list.indexOf(8));
asList returns static <T> List<T>
Where T cannot be primitive (int[]).