La méthode contains dans ArryList [Résolu]

ImFaith 57 Messages postés dimanche 6 décembre 2009Date d'inscription 17 mars 2015 Dernière intervention - 27 déc. 2012 à 23:06 - Dernière réponse : cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention
- 3 janv. 2013 à 09:16
Bonjour tout le monde;
J'ai un problème avec la méthode contains de arrayList. Prenant cet exemple :
ensembles[{(1),(2,3),(4)},{(1),(2,3),(4)}]
Je veux que ma list ne contient pas des doublons mais la méthodes contains ne marche plus. voici un code représentatif, je ne sais pas c'est quoi le probléme exactement ?
ma list contient des doublons ?!!
public class element {
   public ArrayList element = new ArrayList();
}

public class elements {
public ArrayList<element> listElements = new ArrayList<element>();
}

public class test {
     
public static void main(String[] args) throws Exception {
    ArrayList<elements> ensembles = new ArrayList<elements>();
    elements Elements = new elements();
    element Element = new element();
    Element.element.add(1);
    // (1)
    Elements.listElements.add(Element);
    Element = new element();
    Element.element.add(2);
    Element.element.add(3);
    // (1), (2,3)
    Elements.listElements.add(Element);
    Element = new element();
    Element.element.add(4);
    // (1), (2,3), (4)
    Elements.listElements.add(Element);
    ensembles.add(Elements);
    // un autre element 
    Elements = new elements();
    Element = new element();
    Element.element.add(1);
    // (1)
    Elements.listElements.add(Element);
    Element = new element();
    Element.element.add(2);
    Element.element.add(3);
    // (1), (2,3)
    Elements.listElements.add(Element);
    Element = new element();
    Element.element.add(4);
    // (1), (2,3), (4)
    Elements.listElements.add(Element);
    if(!ensembles.contains(Elements)){
    ensembles.add(Elements);
    } 
   }
  }


merci d'avance.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Teclis01 1423 Messages postés mardi 14 décembre 2004Date d'inscription 29 décembre 2012 Dernière intervention - 28 déc. 2012 à 01:50
3
Merci
ArrayList<elements>
=> ArrayList<Elements>

elements Elements new elements();
> Elements elements = new Elements();
element Element new element();
>Element element = new Element();

Ensuite hum... peut être devrais tu regarder ce que le equals et hashCode...
Je pense que ton interprêtation n'est pas la même que l'Integer que tu utilises et est peut être a overrider.

En gros je pense qu'il vérifie déjà le numéro d'instance... puis d'autres choses...
Et non la valeur de l'entier comme tu penses.

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie  Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro

Merci Teclis01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de Teclis01
ImFaith 57 Messages postés dimanche 6 décembre 2009Date d'inscription 17 mars 2015 Dernière intervention - 28 déc. 2012 à 23:57
0
Merci
Bonjour;
j'ai trouvé sur le net, pour eviter les doublons on doit utilise les set. Malgré ça, je rencontre le meme problème, il y a des doublons ?
Set<elements> monHashSet=new HashSet<elements>(); 
    	 elements Elements = new elements();
    	 element Element = new element();
    	 Element.element.add(1);
    	 // (1)
    	 Elements.listElements.add(Element);
    	 Element = new element();
    	 Element.element.add(2);
    	 Element.element.add(3);
    	 // (1), (2,3)
    	 Elements.listElements.add(Element);
    	 Element = new element();
    	 Element.element.add(4);
    	 // (1), (2,3), (4)
    	 Elements.listElements.add(Element);
    	ens.add(Elements);
    	 monHashSet.add(Elements);
        // autre
       Elements = new elements();
        Element = new element();
   	 Element.element.add(1);
   	 // (1)
   	 Elements.listElements.add(Element);
   	 Element = new element();
   	 Element.element.add(2);
   	 Element.element.add(3);
   	 // (1), (2,3)
   	 Elements.listElements.add(Element);
   	 Element = new element();
   	 Element.element.add(4);
   	 // (1), (2,3), (4)
   	 Elements.listElements.add(Element);
   	ens.add(Elements);
   	if( !monHashSet.contains(Elements))
   	 monHashSet.add(Elements);


merci d'avance.
Commenter la réponse de ImFaith
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 2 janv. 2013 à 09:00
0
Merci
Salut,

Teclis01 a raison, le problème vient des méthodes equals et hashcode sur lesquelles sont basés les résultats de la méthode contains.

Il faut que tu les définisses dans ta classe element
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 2 janv. 2013 à 09:01
0
Merci
D'ailleurs, tu nommes assez maladroitement tes objets :

On utilise une majuscule pour le nom des classes et une minuscule pour les noms des instances.

elements Elements new elements();
> Elements elements = new Elements();
Commenter la réponse de cs_Julien39
ImFaith 57 Messages postés dimanche 6 décembre 2009Date d'inscription 17 mars 2015 Dernière intervention - 2 janv. 2013 à 19:56
0
Merci
Merci pour l'aide. ça marhce maintenant.
Commenter la réponse de ImFaith
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 3 janv. 2013 à 09:16
0
Merci
Dans ce cas, peux tu accepter les réponses qui t'on aidées ?
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.