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

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Sujets relatifs:

Leave a Replay

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