Le Touilleur ExpressLe Touilleur ExpressLe Touilleur ExpressLe Touilleur Express
  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express

Et si on regardait ce qu'il y a dans cette HashMap ?

    Home Java Et si on regardait ce qu'il y a dans cette HashMap ?

    Et si on regardait ce qu'il y a dans cette HashMap ?

    Par Nicolas Martignole | Java | Commentaires fermés | 13 décembre, 2003 | 0 | 6 721 affichages
         

    Aujourd’hui je n’ai pas trop d’inspiration alors j’ai regardé dans les Referers ce qui m’arrivait via Google.
    Une des query était « lister le contenu d’une HashMap ». Je vais parler un petit peu de cette classe.

    Tout d’abord rapidement, qu’est-ce qu’une
    HashMap en Java ? C’est une des nouvelles classes
    de l’API Java Collection qui permet de stocker dans un tableau une association de clé/valeur. Il s’agit du principe de l’interface java.util.Map. Les clés ne peuvent pas être null mais par contre, les valeurs « null » sont autorisées pour une HashMap.

    Prenons l’exemple d’une HashMap qui contient en tant que clé le prénom d’une personne et en tant que valeur, son âge sous la forme d’un Integer. Cela nous donne:

    Clé (String) Valeur (Integer)
    Zinedine Zidane 28
    Michael Jackson 44
    Georges W.Bush 12
    Footix 4

    Note: quand je disais que j’étais en manque d’inspiration, je le prouve encore ici 🙂

    Une HashMap est casi identique à la class java.util.Hashtable que vous avez sans doute aussi croisé. Les différences sont que la HashMap n’est pas synchronisée et que vous pouvez avoir une valeur « null » alors qu’avec une Hashtable cela n’est pas possible. Cela complique un peu la chose parfois car si vous voyez une clé présente, vous devrez peut-être tester que la valeur associée n’est pas nulle…

    Cette class n’est pas intéressante pour trier les données, et en plus lorsque vous allez l’itérer, si vous ajouter ensuite d’autres élements vous verrez peut-être que l’ordre des autres élements a changé. Bref ne vous en servez pas pour lister par ordre des élements. Les méthodes get() et put(Object o) par contre vous donnerons un temps d’accès casi-identique que vous accédiez au premier ou au dernier élement de cette Map. Visualisez un arbre en mémoire sur lequel les élements sont répartis.

    Enfin comme d’autres objets Java du framework Collection, vous n’avez pas à vous souciez de l’allocation et de la taille
    de la HashMap. De toute façon vous savez comme moi que les problèmes d’allocation sont mis de côté à partir du moment où vous travailler avec ces objets. Merci Java 🙂

    Revenons à nos moutons enfin à notre liste d’invités et voyons comment itérer sur les clés, comment lister une HashMap. J’ai écrit rapidement le petit bout de code suivant:

            // Creation d'une HashMap
            Map map=new HashMap();
            map.put("Zinedine Zidane",new Integer(28));
            map.put("Michael Jackson", new Integer(44));
            map.put("Georges W.Bush", new Integer(12));
            map.put("Footix",new Integer(4));
    
            // Liste les clés
            for(Iterator i=map.keySet().iterator();i.hasNext();){
                Object key=i.next();
                System.out.println(key + "=" + map.get(key));
            }
    

    Après compilation voici le résultat de l’execution:

    Michael Jackson=44
    Footix=4
    Georges W.Bush=12
    Zinedine Zidane=28
    

    Comme je le disais précedemment on voit que l’ordre d’affichage n’est pas l’ordre d’insertion.
    Pour lister le contenu d’une HashMap, vous devez acquerir un Iterator sur la liste des clés, puis ensuite vous servir de cet Iterator pour lister le contenu. Pourquoi ? parce que la class Iterator va vous garantir que quelqu’un d’autre n’a pas modifié la HashMap alors que vous étiez entrain de l’afficher justement. Cela n’est pas garanti, car on ne maitrise pas la synchronisation, mais si cela arrive vous aurez une exception ConcurrentModificationException. Voir la javadoc de la class HashMap pour plus d’informations.

    Enfin si vous voulez lister uniquement les valeurs sans lister les clés, bien que je ne vois pas trop l’interêt, vous utiliserez la méthode values qui retourne un objet Collection sur lequel vous allez ensuite pouvoir utiliser un Iterator:

        public static void test3() {
            // Creation d'une HashMap
            Map map = new HashMap();
            map.put("Robert", new Integer(28));
            map.put("Roger", null);
            map.put("Ghislaine", new Integer(12));
            map.put("Bernado", null);
    
            // Liste les clés
            for(Iterator i=map.values().iterator();i.hasNext();){
                Object o= i.next() ;
                if(o!=null){
                    System.out.println(o.toString());
                }else{
                    System.out.println("Valeur null");
                }
            }
        }
    

    A noter que j’utilise souvent des déclarations du type:

       InterfaceName monObject=new InterfaceImplementation();
    

    ce qui donne dans le code:

       Map map=new HashMap();
    

    Articles similaires:

    Default ThumbnailQuelle est la différence entre un Iterator et une Enumeration ? Default ThumbnailImplémentation d'equals et hashCode dans une classe annotée Entity Default ThumbnailSynchronisation avec Vector,Hashtable,HashMap et ArrayList Default ThumbnailNouvelles de cette semaine
    Java

    Recent Posts

    • GitHub Actions : le tueur de Jenkins ?

      Avouez-le : ce titre de blog est super racoleur. J’avais aussi pensé

      15 février, 2021
    • Comment recréer du lien social dans l’Entreprise avec des outils numériques en 2021

      Nous sommes en février 2021 pendant le 3ème confinement lié à la

      10 février, 2021
    • FizzBuzz en Java et Scala (surtout Scala)

      L’exercice FizzBuzz est un petit exercice très simple, à tester par exemple

      9 février, 2021

    Recent Tweets

    •  @romainbsl  On attend de voir le ratio des speakers de 2020 qui seront dispo pour 2021 et ensuite on avisera

      8 hours ago
    • Concernant Devoxx FR 2021 on a déjà 79 orateurs/trices qui ont confirmé qu’ils seront là #DevoxxFR https://t.co/R7AVX0VUqe

      10 hours ago
    •  @cblavier  Tu as testé html ? https://t.co/O8gTvI45Bt

      16 hours ago
    • J’aime beaucoup le framework CSS léger Tailwind. Suis en train de recoder la partie publique du CFP de devoxx pour… https://t.co/wE8mWqVROs

      16 hours ago
    •  @cblavier   @glaforge   @doctolib  lol 😂

      18 hours ago

    Mots clés

    agile (18) ajax (11) Apple (11) architecture (6) barcamp (5) BarCampJavaParis (5) ddd (5) devoxx (33) esb (6) exo (6) flex (9) geek (5) google (11) grails (5) groovy (10) humeur (12) humour (7) independant (6) iphone (12) Java (77) javascript (7) jazoon (28) jboss (22) jboss seam (12) jsf (9) jug (16) Linux (11) mac (6) mule (5) parisjug (7) paris jug (22) pjug (6) play (8) playframework (6) portlet (5) recrutement (6) ria (8) Scala (21) scrum (44) spring (23) Startup (11) usi (21) usi2010 (9) web (16) xebia (7)

    Le Touilleur Express

    Contactez-moi : nicolas@touilleur-express.fr

    Suivez-moi sur Twitter : @nmartignole

    Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
    • A propos de l’auteur
    • A propos du Touilleur Express
    Le Touilleur Express