web-dev-qa-db-fra.com

Quand utiliser HashMap sur LinkedList ou ArrayList et inversement

Quelle est la raison pour laquelle nous ne pouvons pas toujours utiliser un HashMap, même s'il est beaucoup plus efficace que ArrayList ou LinkedList dans les opérations add, remove, également quel que soit le nombre d'éléments.

Je l'ai googlé et j'ai trouvé quelques raisons, mais il y avait toujours une solution de contournement pour utiliser HashMap, avec des avantages toujours d'actualité.

69
user517491

Les listes représentent un ordre séquentiel des éléments. Les cartes sont utilisées pour représenter une collection de paires clé/valeur.

Bien que vous puissiez utiliser une carte comme liste, il existe certains inconvénients à le faire.

Maintien de l'ordre: - Une liste par définition est ordonnée. Vous ajoutez des éléments et vous pouvez ensuite parcourir la liste dans l'ordre dans lequel vous les avez insérés. Lorsque vous ajoutez des éléments à une table de hachage, il n'est pas garanti de récupérer les éléments dans le même ordre que vous les avez placés. Il existe des sous-classes de HashMap telles que LinkedHashMap qui maintiendront l'ordre, mais l'ordre n'est généralement pas garanti avec une carte.

Sémantique clé/valeur: - Le but d'une carte est de stocker des éléments en fonction d'une clé pouvant être utilisée pour récupérer l'élément ultérieurement. Une fonctionnalité similaire ne peut être obtenue avec une liste que dans le cas limité où la clé se trouve être la position dans la liste.

Lisibilité du code Considérez les exemples suivants.

    // Adding to a List
    list.add(myObject);         // adds to the end of the list
    map.put(myKey, myObject);   // sure, you can do this, but what is myKey?
    map.put("1", myObject);     // you could use the position as a key but why?

    // Iterating through the items
    for (Object o : myList)           // Nice and easy
    for (Object o : myMap.values())   // more code and the order is not guaranteed

fonctionnalité Collection Certaines fonctions utilitaires intéressantes sont disponibles pour les listes via la classe Collections. Par exemple ...

    // Randomize the list
    Collections.shuffle(myList);

    // Sort the list
    Collections.sort(myList, myComparator);  

J'espère que cela t'aides,

90
polster

Les listes et les cartes sont des structures de données différentes. Les cartes sont utilisées pour associer une clé à une valeur et les listes sont une collection ordonnée.

Map est une interface dans le Java Collection Framework et un HashMap est une implémentation de l'interface Map. HashMap est efficace pour localiser une valeur basée sur une clé et pour l'insertion et la suppression de valeurs basées sur une clé. Les entrées d'un HashMap ne sont pas ordonnées.

ArrayList et LinkedList sont une implémentation de l'interface List. LinkedList fournit un accès séquentiel et est généralement plus efficace pour insérer et supprimer des éléments dans la liste. Toutefois, il est moins efficace pour accéder aux éléments d'une liste. ArrayList fournit un accès aléatoire et est plus efficace pour accéder aux éléments mais est généralement plus lent pour insérer et supprimer des éléments.

31
jazzdawg