rishimaharaj
rishimaharaj

Reputation: 1706

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?

Upvotes: 33

Views: 19323

Answers (3)

Eugene Retunsky
Eugene Retunsky

Reputation: 13139

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'

Upvotes: 25

Louis Wasserman
Louis Wasserman

Reputation: 198211

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 of int[]
  • 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 a List<Integer>. (Disclosure: I contribute to Guava.)
  • use Guava's Ints.indexOf(int[], int), which works directly on primitive arrays.

Upvotes: 37

Sully
Sully

Reputation: 14943

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[]).

Upvotes: 2

Related Questions