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?

rishimaharaj
  • 1,644
  • 2
  • 19
  • 34
  • 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. – rishimaharaj Apr 03 '12 at 15:14
  • 2
    Just be warned that that will only work on _sorted_ `int[]` arrays, which the examples you describe are not. – Louis Wasserman Apr 03 '12 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 Apr 26 '17 at 10:52
  • 1
    @arekolek I'm referring to @rishimaharaj's comment right above my comment, describing a plan to use `binarySearch`. – Louis Wasserman Apr 26 '17 at 17:22
  • how to get the list of position if there is multiple data like there are multiple 3's in data? – parlad Oct 04 '19 at 16:46

3 Answers3

36

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.
Iulian Popescu
  • 2,595
  • 4
  • 23
  • 31
Louis Wasserman
  • 191,574
  • 25
  • 345
  • 413
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'
Youcef LAIDANI
  • 55,661
  • 15
  • 90
  • 140
Eugene Retunsky
  • 13,009
  • 4
  • 52
  • 55
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[]).

Sully
  • 14,672
  • 5
  • 54
  • 79