Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express
Next Previous

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

13 décembre, 2003

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();
0 no like

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

Derniers articles

  • L’instant T où tu poses ta dém…

    Retour d’expérience sur la démission et le moment où vous devez quitter une entreprise.

    6 likes

    24 octobre, 2024
  • The « Robinson » projection – comprendre son système d’information

    Nous sommes en juillet 2022 chez Doctolib. Je travaille sur un projet

    5 likes

    22 octobre, 2024
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise

    Je prépare une présentation avec mon collègue Théotime pour la conférence Cloud

    3 likes

    6 octobre, 2024

Mots clés

Apple (32) Architecture (14) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (15) Perso (266) Recrutement (2) Scala (30) scrum (43) Société (3) Staff Engineer (5) Startup (21) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur X (Twitter) : @nmartignole

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

Le Touilleur Express