English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java-Grundlagen-Tutorial

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java-Exception-Verarbeitung

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java-LinkedHashMap

在本教程中,我们将借助示例学习Java LinkedHashMap类及其操作。

Java集合框架的LinkedHashMap类提供了Map接口的哈希表和链表实现。

LinkedHashMap继承了HashMap类,以将其条目存储在哈希表中。它在内部在所有条目之间维护一个双链列表,以对条目进行排序。

创建一个LinkedHashMap

为了创建双向链表,我们必须先导入java.util.LinkedHashMap包。导入程序包后,可以使用以下方法在Java中创建双向链表。

//LinkedHashMap的初始容量为8,载入因子为0.6
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>();8, 0.6f);

Im obigen Code haben wir einen namens numbers LinkedHashMap erstellt.

Hier,

  • Schlüssel - Ein einzigartiger Identifikator, der verwendet wird, um jedes Element (Wert) im Map zu verknüpfen

  • Value - Elemente, die mit den Schlüsseln im Map verknüpft sind

Hinweis new LinkedHashMap<>(8, 0.6) Dies ist ein Abschnitt. Hier sind die ersten Parameter capacity und loadFactor.

  • capacity -  Die Kapazität dieser doppelten Liste beträgt8. Dies bedeutet, dass es speichern kann8Einträge.

  • loadFactor- Der Lastfaktor dieser doppelten Liste beträgt 0.6. Dies bedeutet, dass jedes Mal, wenn der Hash-Map vollständig ist60% werden die Einträge in einen neuen Hash-Table verschoben, deren Größe doppelt so groß ist wie die ursprüngliche Hash-Table.

Standardkapazität und Lastfaktor

Es ist nicht erforderlich, die Kapazität und den Lastfaktor zu definieren, um eine doppelte Liste zu erstellen. Zum Beispiel

//LinkedHashMap mit Standardkapazität und Lastfaktor
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();

Standardmäßig

  • Die Kapazität der doppelten Liste beträgt 16

  • Der Lastfaktor beträgt 0.75

HinweisDie Klasse LinkedHashMap ermöglicht es uns auch, die Reihenfolge der Einträge zu definieren. Zum Beispiel

//LinkedHashMap mit spezifischer Reihenfolge
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);

Hier ist accessOrder ein Boolescher Wert. Der Standardwert ist false. In diesem Fall werden die Einträge in der doppelten Liste nach ihrer Einfügeordnung sortiert.

Wenn jedoch der Wert von accessOrder auf true gesetzt ist, werden die Einträge in der doppelten Liste nach der Reihenfolge der letzten Zugriffsortierung sortiert.

LinkedHashMap aus anderen doppelten Listen erstellen

Nachstehend ist eine doppelte Liste, die alle Elemente eines anderen Maps enthält.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        //LinkedHashMap für gerade Zahlen erstellen
        Erstelle LinkedHashMap von geraden Zahlen
        verwende put() 2);
        evenNumbers.put("Two", 4);
        System.out.println("LinkedHashMap1: " + System.out.println("aktualisierter LinkedHashMap(): ")
        //LinkedHashMap aus anderen LinkedHashMap erstellen
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap2: " + numbers);
    {}
{}

Ausgabeergebnis

LinkedHashMap1: {Two=2neuer LinkedHashMap: {One=4{}
LinkedHashMap2: {Two=2neuer LinkedHashMap: {One=4Three=3{}

Methoden von LinkedHashMap

Diese Klasse LinkedHashMap bietet verschiedene Operationen auf dem Map an.

将元素插入LinkedHashMap

  • füge den Element ein in LinkedHashMap - put()/füge den angegebenen Schlüssel

  • Wertzuordnung wird in die Zuordnung eingefügt -putAll()

  • füge alle Einträge der angegebenen Zuordnung in dieses Map ein -putIfAbsent()/wenn das Map keine angegebene Schlüssel enthält, füge den angegebenen Schlüssel

z.B.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        // Wertzuordnung wird in das Map hineingefügt
        Erstelle LinkedHashMap von geraden Zahlen
        // LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        verwende put() 2);
        evenNumbers.put("Two", 4);
        evenNumbers.put("Four", + System.out.println("aktualisierter LinkedHashMap(): ")
        // System.out.println("ursprünglicher LinkedHashMap: ")
        verwende putIfAbsent() 6);
        evenNumbers.putIfAbsent("Six", + System.out.println("aktualisierter LinkedHashMap(): ")
        //evenNumbers);
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        // Erstelle LinkedHashMap von numbers
        verwende putAll()
        numbers.putAll(evenNumbers); + numbers);
    {}
{}

Ausgabeergebnis

System.out.println("neuer LinkedHashMap: ")2neuer LinkedHashMap: {One=4{}
ursprünglicher LinkedHashMap: {Two=2neuer LinkedHashMap: {One=4, Four=6{}
aktualisierter LinkedHashMap: {Two=1Two=2neuer LinkedHashMap: {One=4, Four=6{}

, Six=

1.verwende entrySet(), keySet() und values(), um auf die Elemente von LinkedHashMap zuzugreifen

  • entrySet() -gibt alle Schlüssel der Zuordnung zurück/Sammlung der Wertzuordnungen

  • keySet() - gibt die Sammlung aller Schlüssel des Maps zurück

  • values() - gibt die Sammlung aller Werte des Maps zurück

z.B.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: {" + numbers);
        // verwende entrySet()
        System.out.println("Schlüssel")/Wertzuordnung:  + numbers.entrySet());
        // verwende keySet()
        System.out.println("Schlüssel(键): ") + numbers.keySet());
        // verwende values()
        System.out.println("Werte(值): ") + numbers.values());
    {}
{}

Ausgabeergebnis

LinkedHashMap: {One=1Two=2Three=3{}
Schlüssel/Wertzuordnung: [One=1Two=2Three=3]
Schlüssel (Keys): [One, Two, Three]
Werte (Values): [1, 2, 3]

2.Verwenden Sie get() und getOrDefault()

  • get() - Geben Sie den Wert zurück, der mit dem angegebenen Schlüssel verknüpft ist. Wenn der Schlüssel nicht gefunden wird, wird null zurückgegeben.

  • getOrDefault() - Geben Sie den Wert zurück, der mit dem angegebenen Schlüssel verknüpft ist. Wenn der Schlüssel nicht gefunden wird, wird der angegebene Standardwert zurückgegeben.

z.B.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: {" + numbers);
        // Verwenden Sie get()
        int value1 = numbers.get("Three");
        System.out.println("Geben Sie die Zahl zurück: " + value1);
        // Verwenden Sie getOrDefault()
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("Geben Sie die Zahl zurück: " + value2);
    {}
{}

Ausgabeergebnis

LinkedHashMap: {One=1Two=2Three=3{}
Geben Sie die Zahl zurück: 3
Geben Sie die Zahl zurück: 5

Entfernen Sie das Element aus der LinkedHashMap

  • remove(key) - Geben Sie das Element zurück und entfernen Sie es aus der Map, das mit dem angegebenen Schlüssel verknüpft ist.

  • remove(key, value) - Entfernen Sie den Eintrag aus der Map, wenn die angegebene Schlüssel-Wert-Kombination existiert und geben Sie den Boolean-Wert zurück.

z.B.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: {" + numbers);
        //Methode zum Entfernen mit einem Parameter
        int value = numbers.remove("Two");
        System.out.println("Gelöschter Wert: " + value);
        //Methode zum Entfernen mit zwei Parametern
        boolean result = numbers.remove("Three", 3);
        System.out.println("Eintrag3Wurde gelöscht? " + result);
        System.out.println("Aktualisierte LinkedHashMap: {" + numbers);
    {}
{}

Ausgabeergebnis

LinkedHashMap: {One=1Two=2Three=3{}
Gelöschter Wert: 2
Eintrag3Wurde gelöscht? True
Aktualisierte LinkedHashMap: {One=1{}

Andere Methoden von LinkedHashMap

MethodeBeschreibung
clear()Löschen Sie alle Einträge aus dem Map
containsKey()Überprüfen Sie, ob das Map das angegebene Schlüssel enthält und geben Sie einen Boolean-Wert zurück
containsValue()Überprüfen Sie, ob das Map das angegebene Wert enthält und geben Sie einen Boolean-Wert zurück
size()Geben Sie die Größe des Maps zurück
isEmpty()Überprüfen Sie, ob das Map leer ist, und geben Sie einen Boolean-Wert zurück

Unterschiede zwischen LinkedHashMap und HashMap

LinkedHashMap und HashMap implementieren beide das Map-Interface. Allerdings gibt es zwischen ihnen einige Unterschiede.

  • LinkedHashMap führt intern eine doppelte Liste. Daher behält es die Reihenfolge der Elemente bei.

  • LinkedHashMap benötigt mehr Speicherplatz als HashMap. Dies liegt daran, dass LinkedHashMap intern eine Liste führt.

  • Die Leistung von LinkedHashMap ist langsamer als die von HashMap.