Map

why ? what ? when ? how ?

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。

AbstractMap:实现了Map接口的抽象类。Map的基本实现,其他Map的实现类可以通过继承AbstractMap来减少编码量。

SortedMap:继承Map。保证按照键的升序排列的映射,对entrySet、keySet和values方法返回的结果进行迭代时,顺序就会反映出来。

NavigableMap:继承SortedMap,含有返回特定条件最近匹配的导航方法。

HashMap:Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。

HashTable:Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null。并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。Hashtable不建议在新代码中使用,不需要线程安全的场合可以使用HashMap,需要线程安全的场合可以使用ConcurrentHashMap。

LinkedHashMap: LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。它维护着一个双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

TreeMap : Map接口基于红黑树的实现。

Map接口提供了三种集合视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。

  1. keySet
  2. values
  3. entrySet

Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射。Entry 具有的方法:

getKey() , 获取这组映射中的键 key

getValue() , 获取这组映射中的值 value

setValue() , 修改这组映射中的值

hashCode() , 返回这个 Entry 的哈希值

equals() , 对比 key-value 是否相等

	Set<Integer> set =map.keySet();
    for (Integer integer : set) {
        System.out.println(integer);
    }

    Collection<Integer>collection=map.values();
    Iterator<Integer> iterator=collection.iterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }

    Set<Map.Entry<Integer,Integer>> entrySet=map.entrySet();
    for (Map.Entry<Integer, Integer> entry : entrySet) {
        Integer key=entry.getKey();
        Integer value=entry.getValue();
        System.out.println(key+"   "+value);
    }

参考

潘威威 https://blog.csdn.net/panweiwei1994/article/details/77185902

https://blog.csdn.net/u011240877/article/details/52929523

posted @ 2018-08-02 23:23  罗贱人  阅读(207)  评论(0编辑  收藏  举报