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 :

Treeset et remove de l'élément en tete de liste qui ne fonctionne 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
    Developpeur
    Inscrit en
    Septembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Septembre 2004
    Messages : 114
    Par défaut Treeset et remove de l'élément en tete de liste qui ne fonctionne pas !
    Bonjour,

    Je suis sur un petit problème depuis plusieurs heures et cela commence sérieusement à m'énerver.
    Voici mon problème, j'ai un treeset d'objet SommetPondere : TreeSet<SommetPondere> liste;

    Cette liste doit être trié suivant l'attribut ponderation de la classe SommetPondere. Cette dernière implémente donc Comparable et voici le code du comparTo et equals :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public int compareTo(Object a) {
     
    	if(equals(((SommetPondere)a))==true) return 0;
    	else if(ponderation==((SommetPondere)a).getPonderation() && sommet!=((SommetPondere)a).getSommet()) return 1;
    	else if(ponderation<((SommetPondere)a).getPonderation()) return -1;
    	else return 1;
    	}
    public boolean equals(Object a) {
     
    	return (((SommetPondere)a).getSommet()==this.sommet && ((SommetPondere)a).getPonderation()==this.ponderation);
    }
    La ligne qui ne fonctionne pas est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SommetPondere tete = liste.first();			
    liste.remove(tete);
    En gros je souhaite retirer l'élément en tête de liste.
    Lorsque j'effectue un affichage du resultat du compareTo entre l'élément tete et liste.first() il me renvoi 0 (donc éléments égaux). Lorsque je fais pareil avec le equals() il me renvoi true.

    Cependant l'élément n'est toujours pas retiré de la liste.

    Quelqu'un a déjà eu ce problème ?

    Merci d'avance

    Louis

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    On remarque que ton code renvoie une incertitude ( a > b et b > a) dans un cas particulier, si la pondération est identique, mais les sommets différents.

    Essaie d'écrire des méthodes similaires à celles ci-dessous : en retirant cette incertitude, peut-être ta méthode remove fonctionnera ?

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public class SommetPondere
    		implements Comparable<SommetPondere> {
     
    	private int sommet, ponderation;
     
    	// Constructeurs, setters, getters, méthodes métier
     
    	public int compareTo (SommetPondere that) {
    		int diff = this.ponderation - that.ponderation;
    		if (diff != 0)
    			return diff;
    		diff = this.sommet - that.sommet;
    		return diff;
    	}
     
    	public boolean equals (Object other) {
    		if (other == this)
    			return true;
    		if (other == null)
    			return false;
    		if (other instanceof SommetPondere) {
    			SommetPondere that = (SommetPondere)other;
    			return this.sommet == that.sommet &&
    				this.ponderation == that.ponderation;
    		}
    		return false;
    	}
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2012, 17h53
  2. Remove item qui ne fonctionne pas à tout les coups ?
    Par Elharion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/02/2012, 18h26
  3. Remove child basique qui ne fonctionne pas
    Par webpxis dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/07/2010, 21h10
  4. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  5. chercher les éléments d'une table B qui ne sont pas dans la table A
    Par Cupidon dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/01/2008, 13h40

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