Vérifier si un élément existe dans un tableau en Java

On veut vérifier qu'une valeur existe dans un tableau et récupérer sa position si possible. Vous pouvez choisir l'une des trois méthodes suivantes:
  • Parcourir le tableau et comparer toutes les cases avec la valeur en entrée et les deux 
  • La méthode contains()
  • La méthode BinarySearch()

1) Rechercher un élément en parcourant le tableau

Dans cet exemple, on crée une fonction existe() qui retourne la position de la valeur recherchée si elle existe le tableau, sinon elle retourne -1 et affiche un message indiquant que le tableau ne comporte pas cette valeur.

public class Test {

public static void main(String[] args) {
int T[]={1, 5, 2, 22, 14, 3, 18, 52, 40, 88, 73, 27};
int valrech=22;
int position = existe(T, valrech);
if(position!=-1)
System.out.println(valrech+" se trouve dans la position "+position);

}

static int existe(int T[], int val){
for(int i = 0 ; i<T.length;i++){
if(val==T[i])
//retourner la position courante
return i;
}
System.out.println("La valeur recherchée n'existe pas");
return -1;
}
}
Sortie

22 se trouve dans la position 3
La comparaison des String se fait avec la méthode equals() et non pas "==". Lisez l'article Comment comparer deux String en java.

2) Vérifier si l'élément existe dans le tableau

Cette méthode teste seulement l’existence de l'élément. Dans cet exemple, le code suivant peut comparer les deux types string et int. Pour pouvoir utiliser la méthode contains, il faut convertir le tableau entier en un tableau string avec toString(T).

import java.util.Arrays;

public class Test {

public static void main(String[] args) {
int T[]={100,150,180,220,240};
System.out.println(contains(T, "220"));

}

static public boolean contains(int[] T, String val) {
return Arrays.toString(T).contains(val);
}
}
Sortie

true
Pourquoi contains() prend en charge le type String mais pas le type int? Tout simplement parce que int est un type primitive et String devient un objet après l'instanciation et peut être utilisé dans contains(Object o) qui cherche seulement des objets.

On peut proposer comme solution la conversion de int en objet Integer avec la méthode Integer.valueOf(T[i]), sinon on utilise dès le début l'objet Integer. Ce code montre la différence entre les deux:

import java.util.Arrays;

public class Test {

public static void main(String[] args) {
int T[]={10,14,28,201,280};
Integer[] T2 = {10,14,28,201,280};
//tableau int
System.out.println(Arrays.asList(T).contains(28));
//tableau Integer
System.out.println(Arrays.asList(T2).contains(28));
}
}
Sortie

false
true

3) Rechercher une valeur avec la méthode BinarySearch

Cette méthode est générique puisqu'elle accepte tous les types: entier, float, char, double, boolean, short,etc.

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int T[]={'a','b','c','d','e','f'};
System.out.println("La valeur recherchée se trouve dans
la position "+Arrays.binarySearch(T,'d'));
}
}
Sortie:

La valeur recherchée se trouve dans la position 3