33

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?

5
  • Thank you for the answers everyone. With that change though I would have to change my data structure, so instead I'll use the binarySearch method as it will work on int[] arrays. Commented Apr 3, 2012 at 15:14
  • 2
    Just be warned that that will only work on sorted int[] arrays, which the examples you describe are not. Commented Apr 3, 2012 at 16:35
  • @LouisWasserman I don't get your comment and the upvotes it got. indexOf "Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element." - so why wouldn't it work for arbitrary arrays?
    – arekolek
    Commented Apr 26, 2017 at 10:52
  • 1
    @arekolek I'm referring to @rishimaharaj's comment right above my comment, describing a plan to use binarySearch. Commented Apr 26, 2017 at 17:22
  • how to get the list of position if there is multiple data like there are multiple 3's in data?
    – parlad
    Commented Oct 4, 2019 at 16:46

3 Answers 3

37

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.
25

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'
2

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

1
  • how to get value at index 0 on a variable list Commented Mar 30, 2022 at 7:13

Not the answer you're looking for? Browse other questions tagged or ask your own question.