Maison > Java > javaDidacticiel > Utilisation de l'interface Map en Java et résumé des points de connaissance de l'entretien

Utilisation de l'interface Map en Java et résumé des points de connaissance de l'entretien

WBOY
Libérer: 2022-07-20 20:42:14
avant
1587 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur java, qui organise principalement l'utilisation de l'interface Map et les questions connexes sur les points de connaissance des entretiens, y compris les caractéristiques de stockage de l'interface Map, les classes d'implémentation communes, les méthodes de création, les méthodes communes, etc. au contenu ci-dessous, j’espère qu’il sera utile à tout le monde.

Utilisation de l'interface Map en Java et résumé des points de connaissance de l'entretien

Apprentissage recommandé : "Tutoriel vidéo Java"

Interface cartographique

Fonctionnalités de stockage

  • Stockées sous forme de paires clé (clé) valeur (valeur)

  • Les clés sont désordonnées et non ordonnées Indices, les éléments ne peuvent pas être répétés

  • les valeurs ne sont pas ordonnées, pas d'indices, les éléments peuvent être répétés

Classes d'implémentation communes

  1. HashMap
      HashMap  
      • JDK1.2 底层哈希表实现 线程不安全,效率高
  2. LinkedHashMap  
    • JDK1.2 是HashMap的子类,底层哈希表实现 线程不安全,效率高
  3. TreeMap  
    • JDK1.2 是SortedMap的实现类,底层红黑树实现 线程不安全,效率高
  4. HashTable  
    • JDK1.0 底层哈希表实现 线程安全,效率低
  5. Properties  
    • JDK1.0 是HashTable的子类,底层哈希表实现 线程安全,效率低

创建方法

  • 使用多态

Map<键的泛型,值的泛型> 集合名=new 实现类名<键的泛型,值的泛型>();

tips:一个键值对才是一个元素

常用方法

  • 值 put(键,值):将一个键值对添加至集合末尾

    • 如果键已经存在,则进行值的替换
  • void clear():清空集合元素

  • boolean containsKey(键):判断集合中是否存在某个键

  • boolean containsValue(值):判断集合中是否存在某个值

  • 值 get(键):获取键对应的值

  • boolean isEmpty():判断集合内容是否为空,不能判比null值

  • void putAll(Map的集合名):将指定Map集合的内容添加至当前集合末尾

  • 值 remove(键):移除键所对应的键值对

  • int size():获取集合键值对的个数

代码举例:

public class Test {
    public static void main(String[] args) {
        //数字-String   1 - 一   1 - yi
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "一");
        map.put(111, "yiyiyi");
        map.put(666, "liuliuliu");
        map.put(111, "一一一");

        System.out.println(map.containsKey(678));//f
        System.out.println(map.containsValue("yiyiyi"));//t

        System.out.println(map.get(111));

        map.remove(666);
        System.out.println(map.get(666));

        System.out.println(map.size());//2
    }}
Copier après la connexion

遍历方法

  • 1、keySet()+get()  
    • 先获取所有的键,再遍历键得到所有的值
    • Set<键的泛型> keySet():获取所有的键存于Set集合并返回
        //获取所有键
        Set<键的泛型> set=集合名.keySet();
        //遍历所有键
        set.forEach(
            o-> 
            //o就代表当前正在被遍历的键
            //通过集合名.get(o)可以得到对应的值
        );如:		Map<Integer, String> map = new HashMap<>();
        map.put(123, "yiersan");
        map.put(234, "ersansi");
        map.put(456, "siwuliu");
        map.put(999, "jiujiujiu");
        Set<Integer> set=map.keySet();
        set.forEach(o-> System.out.println("键:"+o+",值:"+map.get(o)));
Copier après la connexion
  • 2、values()  
    • 直接获取所有的值

    • Collection<值的泛型> values():获取所有的值存于Collection集合并返回

Collection<值的泛型> coll = 集合名.values();coll.forEach(v-> v就代表当前的值);如:		Collection<String> coll = map.values();
        coll.forEach(v-> System.out.println(v));
Copier après la connexion
  • 3、entrySet()  
    • 获取键值对对象进行遍历

    • Set< Map.Entry<键的泛型,值的泛型> > entrySet():获取所有的键值对对象存于Set集合并返回

    • Set< Map.Entry<键的泛型,值的泛型> > 等同于 Set<键值对对象>

    • getKey():获取Entry对象中的键

    • getValue():获取Entry对象中的值

        //获取键值对对象集合
        Set<Map.Entry<键的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            //通过entry.getKey()获取键
            //通过entry.getValue()获取值
        }如:        Set<Map.Entry<键的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            System.out.println("键:"+entry.getKey()+",值:"+entry.getValue())
        }
        System.out.println("lambda自遍历:");
        set2.forEach(entry-> System.out.println("键:"+entry.getKey()+",值:"+entry.getValue()));
Copier après la connexion
  • 4、自遍历forEach  
    • JDK8.0
        集合名.forEach(new BiConsumer<键的泛型, 值的泛型>() {
            @Override
            public void accept(键的泛型 i, 值的泛型 s) {
                //i代表键
                //s代表值
            }
        });
        System.out.println("lambda简化自遍历:");
        map.forEach((k,v)-> k代表键,v代表值);如:
		map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer i, String s) {
                System.out.println("键:"+i+",值:"+s);
            }
        });
        System.out.println("lambda简化自遍历:");
        map.forEach((k,v)-> System.out.println("键:"+k+",值:"+v));
Copier après la connexion

不同实现类的使用

  • HashMap可以存放null值,键可以存放0-1个null,值可以存放0-n个null

  • LinkedHashMap可以保证存入取出顺序一致

  • TreeMap可以根据键进行默认的升序排序

    • 不能对null进行默认排序
    • 如果键为自定义类型,则必须设置排序规则,方式与TreeSet一致
  • HashTable不能存放null值

  • Properties键和值必须为String类型

    • 创建不建议使用多态
    • 不能声明泛型

集合面试知识点补充

  • Set是一个只有键,没有值的Map集合

  • 底层数组长度为16

  • 数组加载因子为75%,当数组位使用到达75%时,会以平衡二叉树的方式进行数组扩容,扩容长度为原长度*2L'implémentation de la table de hachage sous-jacente JDK1.2 est dangereuse pour les threads et très efficace

    🎜LinkedHashMap
      🎜JDK1.2 est une sous-classe de HashMap. L'implémentation de la table de hachage sous-jacente n'est pas sécurisée pour les threads et est très efficace🎜🎜🎜🎜TreeMap.
        🎜JDK1.2 est la classe d'implémentation de SortedMap. L'implémentation sous-jacente de l'arbre rouge-noir est dangereuse pour les threads et très efficace🎜🎜🎜🎜HashTable.
          🎜L'implémentation de la table de hachage sous-jacente JDK1.0 est thread-safe et inefficace🎜🎜🎜🎜Propriétés
            🎜JDK1.0 est une sous-classe de HashTable. La table de hachage sous-jacente est thread-safe et a une faible efficacité🎜🎜🎜🎜Méthode de création🎜
              🎜Utiliser le polymorphisme🎜🎜
              🎜 Map<Génériques pour les clés, génériques pour les valeurs> Nom de la collection=nouveau Nom de la classe d'implémentation<Génériques pour les clés, génériques pour les valeurs>();🎜</code.> </blockquote>🎜🎜astuces : a Une paire clé-valeur est un élément🎜🎜🎜Méthodes communes🎜🎜🎜🎜<code>Value put(key, value) : Ajoutez une paire clé-valeur à la fin de la collection🎜
                🎜Si la clé existe déjà, alors remplacez la valeur🎜🎜🎜🎜🎜void clear() : effacez les éléments de la collection🎜🎜🎜🎜boolean containKey(key) : déterminez si une certaine clé existe dans la collection 🎜🎜🎜🎜boolean containValue(value) : Détermine si une certaine valeur existe dans la collection🎜🎜🎜🎜value get(key) : Récupère la valeur correspondant à la clé 🎜🎜🎜 + Le contenu est ajouté à la fin de la collection actuelle🎜🎜🎜🎜valueremove(key) : Supprime la paire clé-valeur correspondant à la clé🎜🎜🎜🎜int size( ) : Obtenez la collection Nombre de paires clé-valeur🎜🎜🎜🎜🎜Exemple de code : 🎜🎜rrreee🎜Méthode Traversal🎜
                  🎜1, 🎜keySet()+get()🎜
                    🎜Récupérez d'abord toutes les clés, puis parcourez les clés pour obtenir toutes les valeurs🎜🎜Set keySet() : récupère toutes les clés stockées dans la collection Set et retourne🎜🎜🎜🎜rrreee
                      🎜 2. 🎜valeurs()🎜
                        🎜🎜Obtenez toutes les valeurs directement🎜🎜🎜🎜Collection : récupère toutes les valeurs stockées dans la collection et renvoie 🎜🎜 🎜🎜🎜rrreee
                          🎜3, 🎜entrySet()🎜
                            🎜🎜Obtenir la valeur clé pour parcourir l'objet🎜🎜🎜🎜Set< Map.Entry : Récupère tous les objets de paire clé-valeur stockés dans la collection Set et renvoie 🎜🎜🎜🎜Set 🎜 🎜getKey() : Récupère la clé dans l'objet Entry🎜🎜🎜🎜getValue() : Récupère la valeur dans l'objet Entry🎜🎜🎜🎜🎜rrreee
                              🎜4, 🎜Auto-traversement forEach🎜
                                🎜JDK8.0🎜🎜🎜🎜rrreee🎜Utilisation de différentes classes d'implémentation🎜🎜🎜🎜HashMap peut stocker des valeurs nulles, les clés peuvent stocker 0 à 1 valeurs nulles et les valeurs peuvent stocker 0 -n null🎜🎜🎜🎜LinkedHashMap peut garantir que l'ordre de dépôt et de retrait est cohérent🎜🎜🎜🎜TreeMap peut être trié par ordre croissant par défaut en fonction de la clé 🎜
                                  🎜ne peut pas être effectué sur null Tri par défaut🎜🎜Si la clé est un type personnalisé, vous devez définir les règles de tri de la même manière que TreeSet🎜🎜🎜🎜🎜HashTable ne peut pas stocker null valeurs🎜🎜🎜🎜Propriétés Les clés et les valeurs doivent être de type chaîne🎜
                                    🎜Le polymorphisme n'est pas recommandé pour la création🎜🎜Impossible de déclarer des génériques🎜🎜🎜🎜🎜Définir un supplément de points de connaissance pour l'entretien🎜 🎜🎜🎜Set est une clé uniquement, la collection Map sans valeur 🎜🎜🎜🎜La longueur du tableau sous-jacent est 16🎜🎜🎜🎜Le Le facteur de chargement du tableau est 75%, lorsque le bit du tableau Lorsque l'utilisation atteint 75%, le tableau sera étendu à la manière d'un arbre binaire équilibré. longueur d'origine *2, et la longueur de chaque tableau étendu est de 16🎜 🎜
  • Pourquoi Set ou Map stocke-t-il des valeurs de petite à grande ?

    • Lorsque la valeur stockée est trop petite, la valeur entière elle-même est son indice de stockage, et l'indice va de petit à grand, donc la valeur est également stockée de petit à grand
  • Le rouge-noir Tree utilise la méthode Recherche binaire, caractérisée par l'efficacité des requêtes rapides

  • arbre rouge-noir : utilisez la valeur du code de hachage comme critère de jugement. Si la valeur du code de hachage est supérieure à l'élément actuel, stockez-la. à droite. Si la valeur du code de hachage est inférieure à l'élément actuel, , stockez à gauche

  • Méthode de recherche binaire : caractérisée par le verrouillage de la moitié des données à la fois

  • Lorsque la longueur d'un La liste chaînée dans le tableau de la table de hachage atteint 8, elle va réorganiser les éléments de la liste chaînée, activer l'arbre rouge-noir

Apprentissage recommandé : "Tutoriel vidéo Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal