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

Java集合框架之Map接口浅析的更多相关文章

  1. Java集合框架之Set接口浅析

    Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...

  2. Java集合框架之List接口浅析

    Java集合框架之List接口浅析 一.List综述: 毫无疑问List接口位于java.util包下,继承自 Collection接口 存储元素的特点: 有序可重复(有序:即存进去是什么顺序,取出来 ...

  3. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  4. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  5. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  6. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  7. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  8. java 集合框架(二)Iterable接口

    Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...

  9. 【JAVA集合框架之Map】

    一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...

随机推荐

  1. 【Java中级】(三)IO

    1. 流分为字节流和字符流 2. 字节流下面常用的又有数据流和对象流 3. 字符流下面常用的又有缓存流 文件对象 文件和文件夹都用File表示 //file path : 文件的绝对路径或相对路径Fi ...

  2. python课堂整理1

      1.变量 变量只能由字母.数字.下划线组成 特例:1.变量不能用数字开头    2.不能是python的关键字 3.最好不要和python内置的东西重复 让变量名有意义 些 python3的关键字 ...

  3. linux初学者-sshd服务

     linux初学者-sshd服务   在linux系统操作中,经常需要连接其他的主机,连接其他主机的服务是openssh-server,它的功能是让远程主机可以通过网络访问sshd服务,开始一个安全s ...

  4. java练习---11

    package cn.lyhh; class Person{ private String name; private int age; static String city = "A城&q ...

  5. [POJ2823] Sliding Window 「单调队列」

    我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:   f(i) = max{ a(i-k+1),a(i-k+2),..., a(i) },i ...

  6. Oracle 数据库登录、用户解锁、改密码、创建用户授权操作

    一.数据库登录1.常用账户: 管理员: sys主要练习操作用户: scott2.测试环境是否配置成功: 1.命令窗口 win+R -> cmd(以管理员身份运行) - > sqlplus ...

  7. 关于Hibernate查询对象调用set方法自动同步到数据库解决方案

    Hibernate的get和load方法查询出的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,如果再同一个事务里面,那么在事务递交的时候,Hibernate会把你设置的值自动更新到 ...

  8. 手把手教你grid布局

    概述 目前css布局方案中,网格布局可以算得上是最强大的布局方案了.它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局. 基本概念 在学习grid布局之前,我们需要了解一些基本概念 1 ...

  9. MapReduce 运行全过程解析

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 前言 前面我们讲了 MapReduce 的编程模型,我们知道他主要分成两大阶段来完成一项任务,一是 m ...

  10. Drawable与 Bitmap 转换总结

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android Drawable 使用方法详解请看上篇文章. Drawable 使用方法详解 本篇 ...