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 :

PriorityQueue: Comment connaitre l'ordre de sortie


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut PriorityQueue: Comment connaitre l'ordre de sortie
    Bonjour,
    après plusieurs recherche, je n'ai pas réussi à trouver la méthode de sortie d'une PriorityQueue lorsqu'aucun comparator n'a été implémenté.

    Voici un exemple de code avec la sortie obtenue. Comment j'aurais pu connaitre le récultat à l'avance ?

    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
    		PriorityQueue<String> p = new PriorityQueue<String>();
    		p.offer("aaa");
    		p.offer("abcd");
    		p.offer("aaaa");
    		p.offer("aa");
    		p.offer("x");
    		p.offer("bc");
    		// Résultat : [aa, aaa, aaaa, abcd, x, bc]
     
    		PriorityQueue<String> p1 = new PriorityQueue<String>();
    		p1.offer("abcd");
    		p1.offer("aaaa");
    		p1.offer("aa");
    		p1.offer("x");
    		p1.offer("bc");
    		p1.offer("aaa");
    		// Résultat : [aa, abcd, aaa, x, bc, aaaa]
     
    		PriorityQueue<String> p2 = new PriorityQueue<String>();
    		p2.offer("abcd");
    		p2.offer("bc");
    		p2.offer("aaaa");
    		p2.offer("aa");
    		p2.offer("x");
    		p2.offer("aaa");
    		// Résultat : [aa, aaaa, aaa, bc, x, abcd]
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    L'ordre des PriorityQueue est basé sur l'ordre naturel des éléments, c'est à dire par la valeur renvoyé par la méthode compareTo() (il faut alors que l'objet implémente Comparable).

    Pour les String il s'agit donc de l'ordre "alphabétique" (plus précisément selon la valeur unicode des caractères).



    Par contre attention car cet ordre ne concerne que les méthodes propres aux Queues (peek(), pool(), etc.).

    Les méthodes d'itération via l'Iterator ou d'autre méthode basé là dessus (comme toString()) ne respectent pas cet ordre et dépendent de l'organisation interne de la classe...


    a++

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut
    Merci adiGuba,

    Je comprend mieux l'affichage du résultat non classé (suite à l'utilisation de la méthode toString());


  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut add / offer
    Salut à tous !

    Quelqun aurait une idée sur la différence qu'il y a entre les méthodes
    .add et .offer des PriorityQueue ?

    @+

  5. #5
    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
    Vu que la documentation est strictement identique pour chacune des deux méthodes, celles-ci font exactement la même chose.

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Au niveau de la PriorityQueue il n'y a en effet aucune différence...

    Mais il peut y avoir une différence selon les implémentations, afin de respecter les contrat des interfaces Queue et Collection. En effet une Queue peut refuser l'ajout d'un élément pour une raison quelconque...


    • La méthode offer() "demande" l'ajout d'un élément, mais celui-ci pourra être refusé pour diverses raisons (et dans ce cas on reçoit un false en retour).
    • Par contre, la méthode add() tel qu'elle est originellement défini ne peut retourner false que dans un seul cas : lorsque l'élément est déjà présent et que la collection n'accepte pas les doublons.
      Pour tous les autres cas de refus elle doit remonter une IllegalStateException !


    a++

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/07/2014, 13h55
  2. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51
  3. Réponses: 1
    Dernier message: 12/05/2004, 19h02
  4. [opengl] Comment eviter l'ordre de faces ?
    Par :GREG: dans le forum OpenGL
    Réponses: 3
    Dernier message: 02/03/2004, 19h14
  5. comment connaitre le nombre ...
    Par mythtvtalk.com dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/08/2003, 08h18

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