zoukankan      html  css  js  c++  java
  • Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析

    一、Map接口综述:

    1.1java.util.Map<k, v>简介

    • 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Collection接口同一等级的集合根接口

    • Map集合没有继承Collection接口,其提供的是key到value的映射,Map中不能包含相同的key值,每个key只能影射一个相同的value.key值还决定了存储对象在映射中的存储位置.但不是key对象本身决定的,而是通过散列技术进行处理,可产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置.Map集合包括Map接口以及Map接口所实现的类.

    • Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。 而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。

    • Map有以下三个重要的实现类:

      • Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。

      • HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。

      • TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

    1.2Map数据结构

    • Map主要实现类结构图:

    • Map结构图:

    • 从图中可以看出:
      • Map是一个接口,Map中存储的内容是键值对(key-value)。
      • 为了方便,我们抽象出AbstractMap类来让其他类继承,该类实现了Map中的大部分API,其他Map的具体实现就可以通过直接继承AbatractMap类即可。
      • SortedMap也是一个接口,它继承与Map接口。SortedMap中的内容与Map中的区别在于,它可以按照元素的大小自动排序,里面排序的方法是通过比较器(Comparator)实现的。
      • NavigableMap也是一个接口,它继承与SortedMap接口,所以它肯定也是可以自动排序的,另外,NavigableMap还有一些导航的方法:如获取“大于或等于某个对象的键值对”等等。
      • 再往下就是具体实现类了,TreeMap继承与AbstractMap,同时实现了NavigableMap接口。因此,TreeMap可以依据键值进行排序。
      • HashMap仅仅是继承了AbstractMap,并没有实现NavigableMap接口。因此,HashMap的内容仅是键值对而已,不保证有序。
      • WeakHashMap也是仅仅继承了AbstractMap,它和HashMap的区别是键类型不同,WeakHashMap的键是弱键。
      • HashTable虽然不是继承与AbstractMap,但是它继承与Dictionary(Dictionary也是键值对的接口),而且也实现了Map接口。因此,HashTable的内容也是键值对,且不保证顺序。但是和HashMap相比,HashTable是线程安全的,而且它支持通过Enumeration去遍历。
    •  关于Map接口的重要的实现类,我会在后续章节中展开详细讨论,具体可以关注我的博文,共同学习!

    二、Map接口方法摘要:

    嵌套类摘要
    static interface Map.Entry<K,V>
              映射项(键-值对)。

    Map接口中键和值一一映射. 可以通过键来获取值。

    • 给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。
    • 当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.
    • 当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
    • 当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。
    • 当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。
    方法摘要
     void clear()
              从此映射中移除所有映射关系(可选操作)。
     boolean containsKey(Object key)
              如果此映射包含指定键的映射关系,则返回 true
     boolean containsValue(Object value)
              如果此映射将一个或多个键映射到指定值,则返回 true
     Set<Map.Entry<K,V>> entrySet()
              返回此映射中包含的映射关系的 Set 视图。
     boolean equals(Object o)
              比较指定的对象与此映射是否相等。
     V get(Object key)
              返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
     int hashCode()
              返回此映射的哈希码值。
     boolean isEmpty()
              如果此映射未包含键-值映射关系,则返回 true
     Set<K> keySet()
              返回此映射中包含的键的 Set 视图。
     V put(K key, V value)
              将指定的值与此映射中的指定键关联(可选操作)。
     void putAll(Map<? extends K,? extends V> m)
              从指定映射中将所有映射关系复制到此映射中(可选操作)。
     V remove(Object key)
              如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
     int size()
              返回此映射中的键-值映射关系数。
     Collection<V> values()
              返回此映射中包含的值的 Collection 视图。

    参考:

      http://blog.csdn.net/eson_15/article/details/51150033

      https://www.cnblogs.com/liujunming/p/4647016.html

      http://blog.csdn.net/casularm/article/details/164877

      http://www.runoob.com/java/java-map-interface.html

  • 相关阅读:
    webstorm 自定义代码模板
    HTML5 manifest ApplicationCache
    WebStorm 快捷键收藏
    函数内巧用注释实现多行文本拼接
    图片剪裁上传插件
    将json转为复杂url参数
    CSS3实现半像素边框
    打造自己的3D全景漫游
    自适应rem布局
    header页头内容整理
  • 原文地址:https://www.cnblogs.com/albertrui/p/8334836.html
Copyright © 2011-2022 走看看