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 :

Utiliser une Map comme pile


Sujet :

Collection et Stream Java

  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut Utiliser une Map comme pile
    Bonjour a tous, j'ai une expression que je doit évaluer et qui représente le nœud d'un graphe; pour le faire, je veut utiliser une Map (n'importe la quelle). Mon problème, c'est que je veut l'utilisée comme pile, la méthode put insert a la fin, j'aurai besoin d'un moyen qui me permettrai de récupérer les clefs a partir de la fin, j'arrive seulement a faire le parcours a partir du debut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HashMap <String, Integer> m = new HashMap <String, Integer> ();for (Iterator <String> it = m.keySet ().iterator (); it.hasNext ();)
        System.out.println (it.next ());
    Avec mes remerciements d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Une Map n'est pas une pile. Nous n'allons pas comprendre de quoi tu parles si tu n'expliques pas.
    Un exemple vaut mieux qu'un long discours.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Je veut savoir comment peut-en rajouter des objets, et les retirer a partir du même emplacement dans une Map; c-a-dire, rajouter a la tete et retirer au tête, ou bien rajouter a la queue, et retirer a la queue.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui non mais là tu nous décris ce que fait une Deque ou éventuellement une List.
    Je vois pas ce qu'une Map vient faire dans l'histoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Pour info, une map permet d'associer un objet à une clé (qui est aussi un objet). Comme écrit dans la javadoc, une map ne garantit pas la conservation de l'ordre d'insertion des objets. Ce qui veut dire que si tu inseres 3 objets et que tu parcours ta map, tu n'est pas sur qu'ils ressortiront dans le meme ordre.

    Bref, comme dit par thelvin, la map n'est pas adaptée au comportement que tu souhaites. Il faudrait plutot utiliser un Deque.

  6. #6
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hwoarang
    une map permet d'associer un objet à une clé (qui est aussi un objet)
    Justement, a chaque expression que je doit analyser (chaine de caractère), est associé un entier qui représente l'indice du père, c'est pour ca que je voulait utiliser une map.
    Citation Envoyé par hwoarang
    une map ne garantit pas la conservation de l'ordre d'insertion des objets
    C'est la raisons pour la quelle je doit abondonné les map, dans mon implementation, l'ordre est tres important. J'ai déclarer une nouvelle class Couple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Couple {
        private String noeud;
        private int pere;
    }
    Merci beaucoup pour vos reponses, maintenant, j'ai les idées impeut plus clairs.
    Toute fois, j'esite entre l'utilisation d'une Stack, ou d'une Deque, la quelle doit-je utiliser (la plus optimisée)? et pour quelles raisons?
    Merci d'avance
    .

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Stack dérive de Vector et est, tout comme lui, obsolète pour les mêmes raisons :
    - manque de cohérence avec les collections Java unifiées
    - toutes les méthodes synchronisées, ce qui fait perdre du temps alors qu'en général ça ne sert à rien.

    Utiliser une Deque. Reste à choisir entre ArrayDeque et LinkedList.
    - ArrayDeque, comme son nom l'indique, utilise un tableau en interne pour stocker ses éléments. C'est très efficace en temps et en mémoire, sauf quand il faut enlever un élément au milieu, parce qu'alors il faut décaler tous les autres. De plus, il faut parfois réallouer un tableau plus grand quand il n'y a plus de place, et copier tous les éléments. Si cela arrive trop souvent, il y aura des lenteurs.

    - LinkedList, comme son nom l'indique, est une liste chaînée. Ça veut dire qu'elle crée plein d'objets et qu'il faut suivre la chaîne pour itérer sur son contenu, ce qui est peu efficace en mémoire, et moins bon qu'un tableau en temps. Par contre, elle peut sans problème supprimer des éléments en temps constant, et n'a pas besoin de réallocations. Efficace si on passe son temps à modifier l'intérieur... Mais que pour ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thelvin
    Stack dérive de Vector et est, tout comme lui, obsolète pour les mêmes raisons :
    - manque de cohérence avec les collections Java unifiées
    - toutes les méthodes synchronisées, ce qui fait perdre du temps alors qu'en général ça ne sert à rien.

    Utiliser une Deque. Reste à choisir entre ArrayDeque et LinkedList.
    - ArrayDeque, comme son nom l'indique, utilise un tableau en interne pour stocker ses éléments. C'est très efficace en temps et en mémoire, sauf quand il faut enlever un élément au milieu, parce qu'alors il faut décaler tous les autres. De plus, il faut parfois réallouer un tableau plus grand quand il n'y a plus de place, et copier tous les éléments. Si cela arrive trop souvent, il y aura des lenteurs.

    - LinkedList, comme son nom l'indique, est une liste chaînée. Ça veut dire qu'elle crée plein d'objets et qu'il faut suivre la chaîne pour itérer sur son contenu, ce qui est peu efficace en mémoire, et moins bon qu'un tableau en temps. Par contre, elle peut sans problème supprimer des éléments en temps constant, et n'a pas besoin de réallocations. Efficace si on passe son temps à modifier l'intérieur... Mais que pour ça.
    J'ai finalement opté pour une ArrayDeque, les tableaux son plus performants en terme de parcours (stockage contigüe).
    Un grand merci pour ceux qui m'ont aidé, ça m'a beaucoup servi, surtout a thelvin, t'es vraiment très serviable, il suffi juste de te poser les bonne questions.
    Merci infiniment .

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

Discussions similaires

  1. comment utiliser une icone comme bouton
    Par othmane126 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2006, 19h14
  2. Utiliser une variable comme nom de fichier
    Par lo00_ dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/06/2006, 13h57
  3. Utiliser une Etiquette comme bouton
    Par pschmidtke dans le forum IHM
    Réponses: 6
    Dernier message: 07/06/2006, 14h48
  4. Réponses: 3
    Dernier message: 03/05/2006, 15h08
  5. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12

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