Java : LinkedHashMap 示例

Java 中的 LinkedHashMap (Java SE 23 & JDK 23) 及其示例。
您将找到大多数 LinkedHashMap<K,V> 方法的代码示例。

注解 :

  • 本文可能使用了翻译软件以方便阅读。 另请查看英文原文

简介

Map 接口的哈希表和链接列表实现,具有明确定义的遇到顺序。此实现与 HashMap 的不同之处在于它维护一个贯穿其所有条目的双向链接列表。 (机器翻译)

Class diagram

final var map = new LinkedHashMap<String, Integer>();
System.out.println(map); // {}

map.put("a", 10);
map.put("b", 20);
map.put("c", 30);
System.out.println(map); // {a=10, b=20, c=30}

System.out.println(map.get("a")); // 10
System.out.println(map.get("b")); // 20
System.out.println(map.get("X")); // null

map.remove("b");
System.out.println(map); // {a=10, c=30}
final var linkedHashMap = new LinkedHashMap<String, Integer>();
linkedHashMap.put("xxx", 10);
linkedHashMap.put("yyy", 20);
linkedHashMap.put("aaa", 30);
linkedHashMap.put("bbb", 40);

System.out.println(linkedHashMap); // {xxx=10, yyy=20, aaa=30, bbb=40}

final var hashMap = new HashMap<String, Integer>();
hashMap.put("xxx", 10);
hashMap.put("yyy", 20);
hashMap.put("aaa", 30);
hashMap.put("bbb", 40);

System.out.println(hashMap); // {aaa=30, bbb=40, yyy=20, xxx=10}

Constructors

LinkedHashMap ()

构造一个具有默认初始容量(16)和加载因子(0.75)的空插入顺序 LinkedHashMap 实例。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
System.out.println(map); // {}
System.out.println(map.isEmpty()); // true

map.put("a", 10);
map.put("b", 20);
map.put("c", 30);

System.out.println(map); // {a=10, b=20, c=30}
System.out.println(map.size()); // 3

LinkedHashMap (int initialCapacity)

构造一个具有指定初始容量和默认加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>(10000000);
System.out.println(map); // {}

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    map.put(String.valueOf(i), i);
}

final var endTime = System.nanoTime();

// 0.076968 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var map = new LinkedHashMap<String, Integer>(1);
System.out.println(map); // {}

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    map.put(String.valueOf(i), i);
}

final var endTime = System.nanoTime();

// 0.119630 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

LinkedHashMap (int initialCapacity, float loadFactor)

构造具有指定初始容量和加载因子的空的插入顺序 LinkedHashMap 实例。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>(16, 0.05f);
System.out.println(map); // {}

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    map.put(String.valueOf(i), i);
}

final var endTime = System.nanoTime();

// 0.160612 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var map = new LinkedHashMap<String, Integer>(16, 0.75f);
System.out.println(map); // {}

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    map.put(String.valueOf(i), i);
}

final var endTime = System.nanoTime();

// 0.117338 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder)

使用指定的初始容量、加载因子和排序模式构造一个空的 LinkedHashMap 实例。 (机器翻译)

// accessOrder = false
final var map = new LinkedHashMap<String, Integer>(16, 0.75f, false);
map.put("a", 10);
map.put("b", 20);
map.put("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

System.out.println(map.get("a")); // 10
System.out.println(map); // {a=10, b=20, c=30}

System.out.println(map.get("b")); // 20
System.out.println(map); // {a=10, b=20, c=30}
// accessOrder = true
final var map = new LinkedHashMap<String, Integer>(16, 0.75f, true);
map.put("a", 10);
map.put("b", 20);
map.put("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

System.out.println(map.get("a")); // 10
System.out.println(map); // {b=20, c=30, a=10}

System.out.println(map.get("b")); // 20
System.out.println(map); // {c=30, a=10, b=20}

LinkedHashMap (Map<? extends K,? extends V> m)

构造一个按插入顺序排列的 LinkedHashMap 实例,其映射关系与指定的映射相同。 (机器翻译)

final var m = Map.of("a", 10, "b", 20, "c", 30);
System.out.println(m); // {b=20, a=10, c=30}

final var map = new LinkedHashMap<>(m);
System.out.println(map); // {b=20, a=10, c=30}
System.out.println(map.size()); // 3

Methods

void clear ()

从此映射中删除所有映射。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

System.out.println(map); // {a=1, b=2, c=3}
System.out.println(map.size()); // 3

map.clear();
System.out.println(map); // {}
System.out.println(map.size()); // 0

boolean containsValue (Object value)

如果此映射将一个或多个键映射到指定值,则返回 true。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("X", 3);

System.out.println(map); // {a=1, b=2, c=3, X=3}

System.out.println(map.containsValue(0)); // false
System.out.println(map.containsValue(1)); // true
System.out.println(map.containsValue(2)); // true
System.out.println(map.containsValue(3)); // true
System.out.println(map.containsValue(4)); // false

Set<Map.Entry<K,V>> entrySet ()

返回此映射中包含的映射的集合视图。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
System.out.println(map); // {a=1, b=2, c=3}

final var entries = map.entrySet();
System.out.println(entries); // [a=1, b=2, c=3]

map.replace("b", 20);
System.out.println(map); // {a=1, b=20, c=3}
System.out.println(entries); // [a=1, b=20, c=3]

entries.remove(Map.entry("a", 1));
System.out.println(map); // {b=20, c=3}
System.out.println(entries); // [b=20, c=3]

for (final var entry : entries) {
    entry.setValue(entry.getValue() * 10);
}

System.out.println(map); // {b=200, c=30}
System.out.println(entries); // [b=200, c=30]

V get (Object key)

返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

System.out.println(map); // {a=1, b=2, c=3}

System.out.println(map.get("a")); // 1
System.out.println(map.get("b")); // 2
System.out.println(map.get("c")); // 3
System.out.println(map.get("X")); // null
System.out.println(map.get("")); // null

Set<K> keySet ()

返回此映射中包含的键的 Set 视图。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
System.out.println(map); // {a=1, b=2, c=3}

final var keys = map.keySet();
System.out.println(keys); // [a, b, c]

map.put("d", 4);
System.out.println(map); // {a=1, b=2, c=3, d=4}
System.out.println(keys); // [a, b, c, d]

keys.remove("a");
System.out.println(map); // {b=2, c=3, d=4}
System.out.println(keys); // [b, c, d]

static <K, V> LinkedHashMap<K,V> newLinkedHashMap (int numMappings)

创建一个新的、空的、按插入顺序排列的 LinkedHashMap,适合预期的映射数量。 (机器翻译)

final var map = LinkedHashMap.<String, Integer>newLinkedHashMap(3);
System.out.println(map); // {}
System.out.println(map.isEmpty()); // true

map.put("a", 10);
map.put("b", 20);
map.put("c", 30);

System.out.println(map); // {a=10, b=20, c=30}
System.out.println(map.size()); // 3

V putFirst (K k, V v)

如果给定的映射尚不存在,则将其插入到映射中;如果映射已存在,则将其替换为映射的值(可选操作)。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putFirst("a", 10);
System.out.println(map); // {a=10}

map.putFirst("b", 20);
System.out.println(map); // {b=20, a=10}

map.putFirst("c", 30);
System.out.println(map); // {c=30, b=20, a=10}

V putLast (K k, V v)

如果给定的映射尚不存在,则将其插入到映射中;如果映射已存在,则将其替换为映射的值(可选操作)。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putLast("a", 10);
System.out.println(map); // {a=10}

map.putLast("b", 20);
System.out.println(map); // {a=10, b=20}

map.putLast("c", 30);
System.out.println(map); // {a=10, b=20, c=30}

protected boolean removeEldestEntry (Map.Entry<K,V> eldest)

如果此映射应删除其最旧的条目,则返回 true。 (机器翻译)

@SuppressWarnings("serial")
class MyMap extends LinkedHashMap<String, Integer> {
    private static final int MAX_ENTRIES = 3;

    @Override
    protected boolean removeEldestEntry(Map.Entry<String, Integer> eldest) {
        System.out.println("removeEldestEntry eldest : " + eldest);
        return size() > MAX_ENTRIES;
    }
}

final var map = new MyMap();

System.out.println("-- put a --");
map.put("a", 10);
System.out.println("map : " + map);

System.out.println("-- put b --");
map.put("b", 20);
System.out.println("map : " + map);

System.out.println("-- put c --");
map.put("c", 30);
System.out.println("map : " + map);

System.out.println("-- put d --");
map.put("d", 40);
System.out.println("map : " + map);

System.out.println("-- put e --");
map.put("e", 50);
System.out.println("map : " + map);

// Result
// ↓
//-- put a --
//removeEldestEntry eldest : a=10
//map : {a=10}
//-- put b --
//removeEldestEntry eldest : a=10
//map : {a=10, b=20}
//-- put c --
//removeEldestEntry eldest : a=10
//map : {a=10, b=20, c=30}
//-- put d --
//removeEldestEntry eldest : a=10
//map : {b=20, c=30, d=40}
//-- put e --
//removeEldestEntry eldest : b=20
//map : {c=30, d=40, e=50}

SequencedMap<K,V> reversed ()

返回此地图的反向排序视图。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putLast("a", 10);
map.putLast("b", 20);
map.putLast("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

final var reversedMap = map.reversed();
System.out.println(reversedMap); // {c=30, b=20, a=10}

System.out.println(reversedMap.reversed()); // {a=10, b=20, c=30}

SequencedSet<Map.Entry<K,V>> sequencedEntrySet ()

返回此映射的 entrySet 的 SequencedSet 视图。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putLast("a", 10);
map.putLast("b", 20);
map.putLast("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

final var entries = map.sequencedEntrySet();
System.out.println(entries); // [a=10, b=20, c=30]
System.out.println(entries.reversed()); // [c=30, b=20, a=10]

SequencedSet<K> sequencedKeySet ()

返回此映射的 keySet 的 SequencedSet 视图。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putLast("a", 10);
map.putLast("b", 20);
map.putLast("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

final var keys = map.sequencedKeySet();
System.out.println(keys); // [a, b, c]
System.out.println(keys.reversed()); // [c, b, a]

SequencedCollection<V> sequencedValues ()

返回此映射的值集合的 SequencedCollection 视图。 (机器翻译)

final var map = new LinkedHashMap<>();

map.putLast("a", 10);
map.putLast("b", 20);
map.putLast("c", 30);

System.out.println(map); // {a=10, b=20, c=30}

final var values = map.sequencedValues();
System.out.println(values); // [10, 20, 30]
System.out.println(values.reversed()); // [30, 20, 10]

Collection<V> values ()

返回此映射中包含的值的 Collection 视图。 (机器翻译)

final var map = new LinkedHashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
System.out.println(map); // {a=1, b=2, c=3}

final var values = map.values();
System.out.println(values); // [1, 2, 3]

map.replace("b", 20);
System.out.println(map); // {a=1, b=20, c=3}
System.out.println(values); // [1, 20, 3]

values.remove(1);
System.out.println(map); // {b=20, c=3}
System.out.println(values); // [20, 3]

//values.add(4); // UnsupportedOperationException

Methods declared in HashMap

clear, clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, newHashMap, put, putAll, remove, size

请参阅下面的链接。

Methods declared in AbstractMap

equals, hashCode, toString

请参阅下面的链接。

Methods declared in Map

compute, computeIfAbsent, computeIfPresent, containsKey, equals, forEach, getOrDefault, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size

请参阅下面的链接。

Methods declared in SequencedMap

firstEntry, lastEntry, pollFirstEntry, pollLastEntry

请参阅下面的链接。


相关文章

To top of page