IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

ArrayList : fonction add() qui n'add pas


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Par défaut ArrayList : fonction add() qui n'add pas
    EDIT : ah mince attendez, je crois que j'ai trouvé... C'est un TreeSet que je remplis et pas une ArrayList '-_- ...

    Bonjour à tous,

    Je travaille sur des objets que j'ai appelés Pattern. J'ai le constructeur suivant (qui met dans une ArrayList<Pattern> tous les Pattern de <patterns> qui ne sont pas <p_arg>) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    		private SortedPatternNeighbors(ArrayList<Pattern> patterns, Pattern p_arg){
     
    			p = p_arg;
     
    			for(int i = 0 ; i < patterns.size() ; i++){
     
    				Pattern pi = patterns.get(i);
     
    				if(pi != p){
    					int avant = patternNeighbors.size();		
    					boolean al_return = patternNeighbors.add(pi);
    					boolean pi_null = pi == null
    					int apres = patternNeighbors.size();
    					System.out.println("iteration " + i + " : " + avant + "-" + apres + " : " + al_return + " : " + pi_null);
    				}
    				else
    					System.out.println("iteration " + i + " : identique");
    			}
    		}
    J'obtiens régulièrement des sorties étranges telles que :
    iteration 0 : identique
    iteration 1 : 0-1 : true : false
    iteration 2 : 1-2 : true : false
    iteration 3 : 2-2 : false : false
    Ici, l'élément 0 est égal à <p_arg> donc on ne fait rien.
    Les Pattern 1 et 2 sont ajoutés et la taille de l'ArrayList augmente donc. En revanche le problème vient de l'itération 3. On passe bien par la méthode add mais la taille de l'ArrayList reste à 2.

    Je ne comprend vraiment pas pourquoi la taille de l'ArrayList reste la même. L'objet n'est pas null, il n'est pas égal à un Pattern précédemment ajouté (je n'ai pas non plus redéfini la fonction equals de Pattern qui pourrait justifier qu'il le considère comme identique à un autre précedemment ajouté).

    Dans la doc, il est pourtant écrit que, dans ce cas, une exception devrait être lancée :
    If a collection refuses to add a particular element for any reason other than that it already contains the element, it must throw an exception (rather than returning false). This preserves the invariant that a collection always contains the specified element after this call returns.
    Pourriez-vous m'éclairer ? Pourquoi la méthode add renvoie false dans le dernier cas ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,
    à la ligne 9 de ton code posté, tu fais ceciMais ceci compare les références, et non les valeurs des objets .. tu dois utiliser la méthode equals();
    donc, remplaces cette ligne pour voir ce que cela va te donner
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    				if(!(pi.equals(p))){

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Utilise une boucle foreach pour parcourir la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for(Pattern pi : patterns){
    				if(!(pi.equals(p))){
    					int avant = patternNeighbors.size();		
    					boolean al_return = patternNeighbors.add(pi);
    					boolean pi_null = pi == null;
    					int apres = patternNeighbors.size();
    					System.out.println("iteration " + i + " : " + avant + "-" + apres + " : " + al_return + " : " + pi_null);
    				}
    				else
    					System.out.println("iteration " + i + " : identique");
    			}
    à la ligne 12 tu as oublié un ";" et pourquoi tu le compares avec null, si tu as un pi null, tu auras un NullPointerException en testant la condition if.

    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. resultat de la fonction ajdate qui ne respecte pas les critères
    Par alassanediakite dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 02/09/2007, 00h07
  2. Fonction While {} qui ne fonctionne pas
    Par zoom61 dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2006, 12h17
  3. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32
  4. fonction header qui ne redirige pas
    Par cels dans le forum Langage
    Réponses: 8
    Dernier message: 01/11/2006, 10h12
  5. Une fonction settimeout qui s'execute pas
    Par stepon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo