Arraylist: .Contains ne fonctionne pas ??

Arraylist: .Contains ne fonctionne pas ?? - Java - Programmation

Marsh Posté le 01-03-2009 à 00:09:41    

Bonjour,
 
J'ai une ArrayList dont les éléments sont un "tableau de String".  
J'arrive à remplir ma liste mais pourquoi la méthode contains ne fonctionne pas ??

{
List<String[]> table = new ArrayList<String[]>();
   
  String [] temp = new String [3];  //Je remplit mon tableau temp  
  temp[0]="A";
  temp[1]="B";
  temp[2]="C";      
  table.add(temp);                   // Je l'ajoute à ma liste
 
 
  String [] temp2 = new String [3];             //Je remplit mon tableau temp2 avec les mêmes éléments que temp
  temp2[0]="A";
  temp2[1]="B";
  temp2[2]="C";
                 
  boolean existe =false;
  existe =table.contains(temp) ;            /ici, contains retourne true  
  existe =table.contains(temp2) ;          /ici, contains retourne False alors que les éléments "A"B"C" ont déja été ajouté !!  Pourquoi ???
}
 
Merci

Reply

Marsh Posté le 01-03-2009 à 00:09:41   

Reply

Marsh Posté le 01-03-2009 à 11:08:13    

Pour un array, equals est équivalent à == et ne renvoie true que quand les deux arrays sont le même objet. La seule manière de tester l'égalité de valeur entre des arrays est Arrays.equals, et (à ma connaissance) Collection#contains ne se spécialise pas dessus.

 

Ton code ne renverra jamais true. Même si tu testais table.contains(temp.clone()) ça ne renverrait pas true (cf cas 3 de l'exemple).

 

Tu peux le tester trivialement en regardant la sortie de

Code :
  1. import java.util.Arrays;
  2.  
  3. class Test {
  4.    public static void main(String[] args) {
  5.        final String[] a1 = new String[] {"A", "B", "C"};
  6.        final String[] a2 = new String[] {"A", "B", "C"};
  7.        System.out.println("a1 == a2? " + (a1 == a2));
  8.        System.out.println("a1.equals(a2)? " + (a1.equals(a2)));
  9.        System.out.println("a1.equals(a1.clone())? " + (a1.equals(a1.clone())));
  10.        System.out.println("equals(a1, a2)? " + Arrays.equals(a1, a2));
  11.    }
  12. }


Message édité par masklinn le 01-03-2009 à 11:09:36

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed