La différence entre hashmap, linkedhashmap et treemap

dire d'avance

La plupart des blogs sur Internet sont très détaillés, mais j'ai besoin de la différence la plus essentielle entre les trois, le plus simple sera le mieux. Demandez à ChatGPT, sa réponse est parfaite

demander

Quelle est la différence entre hashmap, linkedhashmap et treemap ?

HashMap, LinkedHashMap et TreeMap sont toutes des classes d'implémentation de l'interface Map en Java. Les différences entre elles sont les suivantes :

HashMap : HashMap est une implémentation basée sur une table de hachage, qui utilise des paires clé-valeur pour stocker des données. Il ne garantit pas l'ordre des éléments, car il stocke et récupère les éléments en fonction de la valeur de hachage de la clé. Dans HashMap, les clés sont uniques tandis que les valeurs peuvent être répétées. La complexité temporelle des opérations d'insertion, de suppression et de recherche de HashMap est de niveau constant (O(1)).

LinkedHashMap : LinkedHashMap hérite de HashMap, et maintient l'ordre des éléments à travers une liste doublement chaînée sur la base de HashMap. Il conserve l'ordre d'insertion ou l'ordre d'accès le plus récent (déterminé par les paramètres du constructeur). Par conséquent, les éléments sont renvoyés dans l'ordre d'insertion ou l'ordre d'accès lors de la traversée de LinkedHashMap. La complexité temporelle des opérations d'insertion, de suppression et de recherche de LinkedHashMap est également constante (O(1)).

TreeMap : TreeMap est une implémentation basée sur un arbre rouge-noir (un arbre de recherche binaire auto-équilibré). Il trie et stocke les éléments en fonction des clés et fournit certaines méthodes liées au tri. Les éléments de TreeMap sont ordonnés et les éléments seront renvoyés dans l'ordre croissant des clés lors de la traversée. La complexité temporelle des opérations d'insertion, de suppression et de recherche est logarithmique (O(log n)), où n est le nombre d'éléments.

en conclusion:

HashMap fournit les meilleures performances d'insertion, de suppression et de recherche, mais ne garantit pas l'ordre des éléments.
LinkedHashMap maintient l'ordre d'insertion ou l'ordre d'accès, et les performances d'insertion, de suppression et de recherche sont légèrement inférieures à celles de HashMap.
TreeMap stocke les éléments dans l'ordre trié des clés et les performances d'insertion, de suppression et de recherche sont relativement faibles, mais il est pratique pour les opérations de recherche et de tri par plage.
Ainsi, le choix de l'implémentation à utiliser dépend de vos besoins. Si vous avez besoin d'opérations de recherche et de modification rapides et que vous ne vous souciez pas de l'ordre des éléments, alors HashMap est un bon choix. Si vous devez maintenir l'ordre d'insertion ou l'ordre d'accès, vous pouvez utiliser LinkedHashMap. Si vous avez besoin de trier par ordre de clé ou de rechercher une plage, alors TreeMap est un choix approprié.

demande encore

L'ordre de parcours de l'ordre d'insertion du hashmap est-il ?

Avant Java 8, l'ordre de parcours de HashMap est indéterminé et l'ordre d'insertion n'est pas garanti. En effet, HashMap est implémenté à l'aide d'une table de hachage, où l'ordre dans lequel les éléments sont stockés et récupérés est lié à la valeur de hachage de la clé.

Cependant, dans Java 8, HashMap a été modifié pour améliorer ses performances et un nouveau constructeur HashMap (int initialCapacity, float loadFactor, boolean accessOrder) est fourni. Un LinkedHashMap trié par ordre d'accès peut être créé en définissant le paramètre accessOrder sur true.

Si vous devez conserver l'ordre de parcours cohérent avec l'ordre d'insertion, vous pouvez utiliser LinkedHashMap. Il maintient une liste à double lien pour maintenir l'ordre d'insertion ou l'ordre d'accès des éléments. Dans LinkedHashMap, les éléments sont renvoyés dans l'ordre d'insertion ou d'accès lors de la traversée, selon le constructeur que vous utilisez pour créer l'objet.

L'exemple de code est le suivant :

import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("one", 1);
        linkedHashMap.put("two", 2);
        linkedHashMap.put("three", 3);

        for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
    
    
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}

La sortie sera dans l'ordre d'insertion :

one : 1
two : 2
three : 3

Il convient de noter que LinkedHashMap occupera plus de mémoire que HashMap, car il doit maintenir une structure de liste chaînée supplémentaire pour maintenir l'ordre.

おすすめ

転載: blog.csdn.net/qq_50209297/article/details/131177032