Pourquoi indexOf ne parvient-il pas à trouver l'objet?

J'ai créé une liste entière et j'essaie de retourner l'index d'une valeur spécifique. Le tableau est 3,8,2,5,1,4,7,6 et je veux retourner l'indexOf(3), qui devrait être 0.

J'ai essayé ce qui suit dans le Scrapbook Eclipse Java après avoir importé java.util.*:

int[] A = {3,8,2,5,1,4,7,9};
Arrays.asList(A).indexOf(3)

J'ai aussi essayé:

int[] A = {3,8,2,5,1,4,7,6};
ArrayList<Integer> l = new ArrayList(Arrays.asList(A));
l.indexOf(3)

Les deux renvoient -1. Pourquoi? Comment obtenir que cela fonctionne comme prévu?

28
demandé sur rishimaharaj 2012-04-02 22:31:56

3 réponses

, Il devrait être Integer[] pas int[] afin de le faire fonctionner.

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'
25
répondu Eugene Retunsky 2018-08-27 10:15:29

Arrays.asList(A) retourne un List<int[]>. C'est parce qu'il attend un tableau d'objets, pas de type primitif. Vos options incluent:

  • utiliser Integer[] au lieu de int[]
  • inline le tableau, et laissez autoboxing s'en occuper; Arrays.asList(3,8,2,5,1,4,7,9) fonctionnera bien
  • utiliser Goyave est Ints.asList(int...) méthode pour afficher la primitive tableau List<Integer>. (Divulgation: je contribue à la goyave.)
  • utilisez Ints.indexOf(int[], int) De Goyave, qui fonctionne directement sur les tableaux primitifs.
33
répondu Louis Wasserman 2018-02-09 14:52:17

Faites-le de cette façon

Integer[] array = {3,8,2,5,1,4,7,9};
List<Integer> list = Arrays.asList(array);

System.out.println(list.indexOf(8));

Aslist renvoie static <T> List<T> Où T ne peut pas être primitif (int []).

1
répondu Hitham S. AlQadheeb 2012-04-02 18:44:48