美文网首页
Java集合系列06之Map接口概览

Java集合系列06之Map接口概览

作者: Hengtao24 | 来源:发表于2019-05-22 09:50 被阅读0次

系列文章

前言

前面介绍集合的框架时,我们提到集合框架中主要有ListSetMap三种数据类型,List我们已经分析过了,而Set的实现依赖于MapHashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,因此我们再来分析Map

本文源码分析基于jdk 1.8.0_121

关系图

Map框架
  • Map是具有映射关系的集合接口,储存内容是键值对
  • AbstractMap是继承于Map的抽象类,实现了Map中大部分方法,类似AbstractList
  • SortedMap 是继承于Map的接口,储存有序的键值对,排序是通过Comparator实现的
  • NavigableMap 是继承于SortedMap的接口,NavigableMap有一系列的导航方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等
  • TreeMap 继承于AbstractMap,并实现了NavigableMap接口,储存有序的键值对
  • HashMap 继承于AbstractMap,存储无序的键值对
  • WeakHashMap 继承于AbstractMap,存储无序的“弱键值对”
  • Hashtable 继承于Dictionary,实现了Map接口,储存无序的键值对,且是线程安全的,支持Enumeration遍历。

Map

Map的定义如下:

public interface Map<K,V>

其储存了键值对,且不允许包含重复的键,一个键只能对应一个值,Map可以单独查看键集、值集或键-值映射关系。

Map API

void                 clear()
boolean              containsKey(Object key)
boolean              containsValue(Object value)
Set<Entry<K, V>>     entrySet()
boolean              equals(Object o)
V                    get(Object key)
int                  hashCode()
boolean              isEmpty()
Set<K>               keySet()
V                    put(K key, V value)
void                 putAll(Map<? extends K, ? extends V> map)
V                    remove(Object key)
int                  size()
Collection<V>        values()
  • keySet() 方法用于返回键集
  • values() 方法用于返回值集
  • entrySet() 方法用于返回键-值映射关系

Map.Entry

其定义如下:

interface Entry<K,V>

Map.EntryMap的内部接口,Map.Entry是键值对,Map通过entrySet() 获取Map.Entry的键值对集合。

Map.Entry API

K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();

AbstractMap

其定义如下:

public abstract class AbstractMap<K,V> implements Map<K,V> 

AbstractMap提供了Map的大部分实现,要实现不可修改的映射,只需扩展此类并提供 entrySet()方法的实现即可。要实现可修改的映射,编程人员必须另外重写此类的 put 方法(否则将抛出 UnsupportedOperationException),entrySet().iterator() 返回的迭代器也必须另外实现其 remove 方法。

AbstractMap API

abstract Set<Entry<K, V>>     entrySet()
         void                 clear()
         boolean              containsKey(Object key)
         boolean              containsValue(Object value)
         boolean              equals(Object o)
         V                    get(Object key)
         int                  hashCode()
         boolean              isEmpty()
         Set<K>               keySet()
         V                    put(K key, V value)
         void                 putAll(Map<? extends K, ? extends V> m)
         V                    remove(Object key)
         int                  size()
         String               toString()
         Collection<V>        values()
         Object               clone()

SortedMap

其定义如下:

public interface SortedMap<K,V> extends Map<K,V> 

SortedMap是一个有序的键值映射,排序方式有两种:自然排序和指定Comparator

SortedMap API

Comparator<? super K>     comparator()
K                         firstKey()
SortedMap<K, V>           headMap(K endKey)
K                         lastKey()
SortedMap<K, V>           subMap(K startKey, K endKey)
SortedMap<K, V>           tailMap(K startKey)
Set<K>                    keySet();
Collection<V>             values();
Set<Map.Entry<K, V>>      entrySet();

NavigableMap

其定义如下:

public interface NavigableMap<K,V> extends SortedMap<K,V>

NavigableMap是继承于SortedMap的接口,具有了针对给定搜索目标返回最接近匹配项的导航方法。

NavigableMap API

Entry<K, V>             ceilingEntry(K key)
Entry<K, V>             firstEntry()
Entry<K, V>             floorEntry(K key)
Entry<K, V>             higherEntry(K key)
Entry<K, V>             lastEntry()
Entry<K, V>             lowerEntry(K key)
Entry<K, V>             pollFirstEntry()
Entry<K, V>             pollLastEntry()
K                       ceilingKey(K key)
K                       floorKey(K key)
K                       higherKey(K key)
K                       lowerKey(K key)
NavigableSet<K>         descendingKeySet()
NavigableSet<K>         navigableKeySet()
NavigableMap<K, V>      descendingMap()
NavigableMap<K, V>      headMap(K toKey, boolean inclusive)
SortedMap<K, V>         headMap(K toKey)
SortedMap<K, V>         subMap(K fromKey, K toKey)
NavigableMap<K, V>      subMap(K fromKey, boolean fromInclusive, boolean toInclusive)
SortedMap<K, V>         tailMap(K fromKey)
NavigableMap<K, V>      tailMap(K fromKey, boolean inclusive)
  • lowerEntryfloorEntryceilingEntryhigherEntry 分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象,如果不存在这样的键,则返回 null
  • firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null。
  • lowerKey、floorKey、ceilingKey 和 higherKey分别返回与小于、小于等于、大于等于、大于给定键的键
  • navigableKeySet、descendingKeySet分别获取正序/反序的键集,descendingMap()返回此映射中所包含映射关系的逆序视图
  • headMap、subMap、tailMap返回特定的键-值对的子集

Dictionary

其定义如下:

public abstract class Dictionary<K,V> 

NavigableMapJDK 1.0定义的键值对的接口,它也包括了操作键值对的基本函数。

Dictionary API

Enumeration<V>     elements()
V                  get(Object key)
boolean            isEmpty()
Enumeration<K>     keys()
V                  put(K key, V value)
V                  remove(Object key)
int                size()

相关文章

网友评论

      本文标题:Java集合系列06之Map接口概览

      本文链接:https://www.haomeiwen.com/subject/nufyzqtx.html