Java Advanced Maps

2018-02-23  本文已影响0人  YoungJadeStone

一提到Map,我们最常想到的是HashMap。在实际coding过程中,陆续遇到其他的一些map implementation,想在此分享:

LinkedHashMap

IdentityHashMap: Hash table and linked list implementation of the Map interface, with predictable iteration order. This implementation differs from HashMap in that it maintains a doubly-linked list running through all of its entries. This linked list defines the iteration ordering, which is normally the order in which keys were inserted into the map (insertion-order). Note that insertion order is not affected if a key is re-inserted into the map.
Note that this implementation is not synchronized.

简言之,和HashMap比较来说,LinkedHashMap能够保证entry的顺序。

IdentityHashMap

IdentityHashMap: This class implements the Map interface with a hash table, using reference-equality in place of object-equality when comparing keys (and values). In other words, in an IdentityHashMap, two keys k1 and k2 are considered equal if and only if (k1==k2). (In normal Map implementations (like HashMap) two keys k1 and k2 are considered equal if and only if (k1==null ? k2==null : k1.equals(k2)).)
Note that this implementation is not synchronized.

简言之,对于key和value,HashMap用equals比较大小,而IdentityHashMap用 == 比较大小,比HashMap更快。

Multimap

Multimap: A collection that maps keys to values, similar to Map, but in which each key may be associated with multiple values. You can visualize the contents of a multimap either as a map from keys to nonempty collections of values:

  • a → 1, 2
  • b → 3
    ... or as a single "flattened" collection of key-value pairs:
  • a → 1
  • a → 2
  • b → 3

每个key可以对应多个values。

Tips
以引用里的key, values为例:

Map.Entry<K, V>

Map.Entry<K, V>是一个interface。它的implementation包括:AbstractMap.SimpleEntry<K,V>
AbstractMap.SimpleImmutableEntry<K,V>
正因为Map.Entry<K, V>是interface,我们不能instantiate它(比如new)。


To be continue...

上一篇 下一篇

猜你喜欢

热点阅读