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

Java 基礎教程

Java フローコントロール

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 異常処理

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);

上記のコードでは、numbersという名前のLinkedHashMapを作成しました。

ここでは、

  • Key - マップの各要素(値)をユニークに識別するために使用されます

  • Value - マップのキーに関連付けられた要素

注意 new LinkedHashMap<>(8,0.6) この部分では、最初のパラメータはcapacity、次のパラメータはloadFactorです。

  • capacity -  このリンクドリストの容量は8。これは、それが格納できることを意味します。8のエントリがあります。

  • loadFactor- このリンクドリストの負荷因子は0です。6。これは、ハッシュマップが満たされたときにハッシュテーブルが2倍のサイズに拡張されることを意味します。60%の場合、エントリは新しいハッシュテーブルに移動され、そのサイズは元のハッシュテーブルの2倍です。

デフォルトの容量と負荷因子

容量と負荷因子を定義しなくてもリンクドリストを作成できます。例えば、

//デフォルトの容量と負荷因子を持つLinkedHashMap
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();

デフォルトで

  • リンクドリストの容量は 16

  • 負荷因子は0です。75

注意:LinkedHashMapクラスは、エントリの順序を定義することも許可しています。例えば

//指定された順序を持つLinkedHashMap
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);

ここでのaccessOrderは布尔値です。デフォルト値はfalseです。この場合、リンクドリスト内のエントリは挿入順序に基づいて並べ替わります。

しかし、accessOrderの値がtrueの場合、リンクドリスト内のエントリは最も最近にアクセスした順序で並べ替わります。

他のリンクドリストからLinkedHashMapを作成

以下は、他のマッピングを含むすべての要素を含むリンクドリストを作成する方法です。

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        //偶数のLinkedHashMapを作成
        LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("LinkedHashMap1: " + evenNumbers);
        //他のLinkedHashMapからLinkedHashMapを作成
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap2: " + numbers);
    {}
{}

出力結果

LinkedHashMap1: {Two=2, Four=4{}
LinkedHashMap2: {Two=2, Four=4、Three=3{}

LinkedHashMapのメソッド

このLinkedHashMapクラスは、マップに対してさまざまな操作方法を行うことができます。

要素がLinkedHashMapに挿入されます

  • put() - 指定されたキー/値マッピングがマッピングに挿入されます

  • putAll() -指定されたマッピングのすべてのエントリをこのmapに挿入します

  • putIfAbsent() -mapに指定されたキーが存在しない場合、指定されたキー/値マッピングがmapに挿入されます

例えば、

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        // 偶数のLinkedHashMapを作成
        LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        // 使用 put()
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("元のLinkedHashMap: ") + evenNumbers);
        // 使用 putIfAbsent()
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("更新されたLinkedHashMap(): ") + evenNumbers);
        //numbersのLinkedHashMapを作成
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        // 使用 putAll()
        numbers.putAll(evenNumbers);
        System.out.println("新しいLinkedHashMap: ") + numbers);
    {}
{}

出力結果

元のLinkedHashMap: {Two=2, Four=4{}
更新されたLinkedHashMap: {Two=2, Four=4, Six=6{}
新しいLinkedHashMap: {One=1、Two=2, Four=4, Six=6{}

LinkedHashMapの要素にアクセス

1.使用entrySet()、keySet()とvalues()

  • entrySet() -マッピングに含まれるすべてのキーを返します/値マッピングの集合

  • keySet() - mapに含まれるすべてのキーの集合を返します

  • values() - mapに含まれるすべての値の集合を返します

例えば、

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);
        // 使用 entrySet()
        System.out.println("Key/Value マッピング: ") + numbers.entrySet());
        // 使用 keySet()
        System.out.println("Keys(キー): ") + numbers.keySet());
        // 使用 values()
        System.out.println("Values(値): ") + numbers.values());
    {}
{}

出力結果

LinkedHashMap: {One=1、Two=2、Three=3{}
Key/Value マッピング: [One=1、Two=2、Three=3]
Keys(キー): [One, Two, Three]
Values(値): [1, 2, 3]

2.get()とgetOrDefault()を使用して

  • get() - 指定のキーに関連付けられた値を返します。キーが見つからない場合、nullが返されます。

  • getOrDefault() - 指定のキーに関連付けられた値を返します。キーが見つからない場合、指定されたデフォルト値が返されます。

例えば、

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);
        // get()を使用して
        int value1 = numbers.get("Three");
        System.out.println("返される数字: " + value1);
        // getOrDefault()を使用して
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("返される数字: " + value2);
    {}
{}

出力結果

LinkedHashMap: {One=1、Two=2、Three=3{}
数字を返します: 3
数字を返します: 5

LinkedHashMap要素の削除

  • remove(key) - 指定のキーに関連付けられた項を返し、マッピングから削除します。

  • remove(key, value) - 指定のキーkeyが指定の値valueにマッピングされ、布尔値が返されるときのみ、マッピングからエントリを削除します。

例えば、

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);
        //一つの引数を持つ削除メソッド
        int value = numbers.remove("Two");
        System.out.println("削除値: " + value);
        //二つの引数を持つ削除メソッド
        boolean result = numbers.remove("Three", 3);
        System.out.println("エントリ3削除されましたか? " + result);
        System.out.println("更新後のLinkedHashMap: " + numbers);
    {}
{}

出力結果

LinkedHashMap: {One=1、Two=2、Three=3{}
削除された値: 2
エントリ3削除されましたか? True
更新後のLinkedHashMap: {One=1{}

LinkedHashMapの他のメソッド

メソッド説明
clear()マップからすべてのエントリを削除します
containsKey()マップが指定されたキーを含んでいるかどうかを確認し、ブール値を返します
containsValue()マップが指定された値を含んでいるかどうかを確認し、ブール値を返します
size()マップのサイズを返します
isEmpty()マップが空かどうかを確認し、ブール値を返します

LinkedHashMapとHashMapの違い

LinkedHashMapとHashMapはどちらもMapインターフェースを実装していますが、いくつかの違いがあります。

  • LinkedHashMapは内部でダブルリンクリストをメンテナンスしています。したがって、その要素の挿入順序を保ちます。

  • LinkedHashMapクラスはHashMapよりも多くのストレージスペースが必要です。これはLinkedHashMapが内部でリンクリストをメンテナンスしているためです。

  • LinkedHashMapのパフォーマンスはHashMapよりも遅い。