Heim > Java > javaLernprogramm > Hauptteil

Die Verwendung der Map-Schnittstelle in Java und die Zusammenfassung der Interview-Wissenspunkte

WBOY
Freigeben: 2022-07-20 20:42:14
nach vorne
1538 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Java, das hauptsächlich die Verwendung der Kartenschnittstelle und verwandte Fragen zu Interview-Wissenspunkten organisiert, einschließlich der Speichereigenschaften der Kartenschnittstelle, allgemeiner Implementierungsklassen, Erstellungsmethoden, allgemeiner Methoden usw. Werfen wir einen Blick darauf Ich hoffe, dass der Inhalt unten für alle hilfreich sein wird.

Die Verwendung der Map-Schnittstelle in Java und die Zusammenfassung der Interview-Wissenspunkte

Empfohlenes Lernen: „Java-Video-Tutorial

Kartenschnittstelle

Speicherfunktionen

  • In Form von Schlüssel-(Schlüssel-)Wert-(Wert)-Paaren gespeichert

  • Schlüssel sind ungeordnet und ungeordnet Hrsg Indizes, Elemente können nicht wiederholt werden

  • Werte sind ungeordnet, keine Indizes, Elemente können wiederholt werden

Gemeinsame Implementierungsklassen

  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
    }}
Nach dem Login kopieren

遍历方法

  • 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)));
Nach dem Login kopieren
  • 2、values()  
    • 直接获取所有的值

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

Collection<值的泛型> coll = 集合名.values();coll.forEach(v-> v就代表当前的值);如:		Collection<String> coll = map.values();
        coll.forEach(v-> System.out.println(v));
Nach dem Login kopieren
  • 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()));
Nach dem Login kopieren
  • 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));
Nach dem Login kopieren

不同实现类的使用

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

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

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

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

  • Properties键和值必须为String类型

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

集合面试知识点补充

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

  • 底层数组长度为16

  • 数组加载因子为75%,当数组位使用到达75%时,会以平衡二叉树的方式进行数组扩容,扩容长度为原长度*2JDK1.2 zugrunde liegende Hash-Tabellen-Implementierung ist Thread-unsicher und hocheffizient

    🎜LinkedHashMap
      🎜JDK1.2 ist eine Unterklasse von HashMap. Die zugrunde liegende Hash-Tabellenimplementierung ist threadunsicher und hocheffizient🎜🎜🎜🎜TreeMap
        🎜JDK1.2 ist die Implementierungsklasse von SortedMap. Die zugrunde liegende Rot-Schwarz-Baum-Implementierung ist threadunsicher und hocheffizient🎜🎜🎜🎜HashTable
          🎜JDK1.0 zugrunde liegende Hash-Tabellen-Implementierung ist Thread-sicher und ineffizient🎜🎜🎜🎜Eigenschaften
            🎜JDK1.0 ist eine Unterklasse von HashTable. Die zugrunde liegende Hash-Tabelle ist threadsicher und weist eine geringe Effizienz auf > Map Sammlungsname=neuer Name der Implementierungsklasse();🎜🎜🎜Tipps: Ein Schlüssel-Wert-Paar ist ein Element🎜🎜🎜Gemeinsame Methoden🎜🎜🎜🎜Value put(key, value): Fügen Sie am Ende der Sammlung ein Schlüssel-Wert-Paar hinzu🎜
              🎜Wenn der Schlüssel bereits vorhanden ist, dann Ersetzen Sie den Wert🎜🎜🎜🎜🎜void clear(): Lösche die Sammlungselemente🎜🎜🎜🎜boolean containsKey(key): Bestimmen Sie, ob ein bestimmter Schlüssel in der Sammlung vorhanden ist 🎜🎜🎜🎜boolean containsValue(value): Bestimmen Sie, ob ein bestimmter Wert in der Sammlung vorhanden ist🎜🎜🎜🎜value get(key): Rufen Sie den dem Schlüssel entsprechenden Wert ab 🎜🎜🎜 + Inhalt wird am Ende der aktuellen Sammlung hinzugefügt🎜🎜🎜🎜valueremove(key): Entfernen Sie das Schlüssel-Wert-Paar, das dem Schlüssel entspricht🎜🎜🎜🎜int size( ): Sammlung Anzahl der Schlüssel-Wert-Paare abrufen🎜🎜🎜🎜🎜Codebeispiel: 🎜🎜rrreee🎜Traversal-Methode🎜
                🎜1, 🎜keySet()+get()🎜
                  🎜Zuerst alle Schlüssel abrufen, dann die Schlüssel durchlaufen, um alle Werte zu erhalten🎜🎜Set: Alle in der Set-Sammlung gespeicherten Schlüssel abrufen und zurückgeben🎜🎜🎜🎜rrreee
                    🎜 2. 🎜values()🎜
                      🎜🎜Alle Werte direkt abrufen🎜🎜🎜🎜Collection Values(): Alle in der Sammlung gespeicherten Werte abrufen und zurückgeben 🎜🎜 🎜🎜🎜rrreee
                        🎜3, 🎜entrySet()🎜
                          🎜🎜Holen Sie sich den Schlüsselwert zum Durchlaufen des Objekts🎜🎜🎜🎜Set< Map.Entry : Rufen Sie alle in der Set-Sammlung gespeicherten Schlüssel-Wert-Paar-Objekte ab und geben Sie 🎜🎜🎜🎜Set< Map.Entry< Generic type of value> zurück 🎜 🎜getKey(): Ruft den Schlüssel im Entry-Objekt ab🎜🎜🎜🎜getValue(): Ruft den Wert im Entry-Objekt ab🎜🎜🎜🎜🎜rrreee
                            🎜4, 🎜Self-traversing forEach🎜
                              🎜JDK8.0🎜🎜🎜🎜rrreee🎜Verwendung verschiedener Implementierungsklassen🎜🎜🎜🎜HashMap kann Nullwerte speichern, Schlüssel können 0-1 Nullen speichern und Werte können 0 speichern -n null🎜🎜🎜🎜LinkedHashMap kann sicherstellen, dass die Reihenfolge der Ein- und Auszahlung konsistent ist🎜🎜🎜🎜TreeMap kann standardmäßig in aufsteigender Reihenfolge nach dem Schlüssel sortiert werden 🎜
                                🎜kann nicht für Null-Standardsortierung durchgeführt werden🎜🎜Wenn der Schlüssel ein benutzerdefinierter Typ ist, müssen Sie die Sortierregeln auf die gleiche Weise festlegen wie TreeSet🎜🎜🎜🎜🎜HashTable kann Null nicht speichern Werte: 🎜🎜🎜Set ist nur ein Schlüssel, die Map-Sammlung ohne Wert 🎜🎜🎜🎜Die zugrunde liegende Array-Länge beträgt 16🎜🎜🎜🎜Die Der Array-Ladefaktor beträgt 75 %, wenn die Array-Bit-Nutzung 75 % erreicht, wird das Array im Sinne eines ausgeglichenen Binärbaums erweitert Originallänge *2, und die Länge jedes erweiterten Arrays beträgt 16🎜 🎜
  • Warum speichert Set oder Map Werte von klein bis groß?

    • Wenn der gespeicherte Wert zu klein ist, ist der ganzzahlige Wert selbst sein Speicherindex, und der Index reicht von klein nach groß, sodass der Wert auch von klein nach groß gespeichert wird
  • Rot-Schwarz Der Baum verwendet die Methode „Binäre Suche“, die sich durch „schnelle Abfrageeffizienz“ auszeichnet. Rot-Schwarz-Baum: Verwenden Sie den Hash-Code-Wert als Beurteilungskriterium nach rechts. Wenn der Hash-Codewert kleiner als das aktuelle Element ist, wird nach links gespeichert

    Binäre Suchmethode
  • : gekennzeichnet durch das gleichzeitige Sperren der Hälfte der Daten
  • Wenn die Länge von a Wenn die verknüpfte Liste im Hash-Tabellen-Array 8 erreicht, werden die Elemente der verknüpften Liste neu organisiert und der Rot-Schwarz-Baum aktiviert. Lernempfehlung: „

    Java-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDie Verwendung der Map-Schnittstelle in Java und die Zusammenfassung der Interview-Wissenspunkte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage