Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key;另一组用于保存Map中的value,形成key-value的存储形式

Map集合中包含的一些方法:

void clear():删除Map集合中的所有key-value对。

boolean containsKey(object key):查询Map集合中是否包含指定的key,如果包含,返回true。

boolean containsValue(Object value): 查询Map集合中是否包含指定的value,如果包含返回true。

set entrySet():返回Map中包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry(Entry是Map的内部类)对象。

Object get(Object key):返回指定的key所对应的value;如果此Map中不包括该key,则返回null。

boolean isEmpty():查询该Map是否为空,如果为空则返回null。

set keyset():返回该map中所有key所组成的集合。

Object put(Object key,Object value):添加一个key-value对,如果当前Map中已有一个与该key相等的key-value对,则新的key-value会覆盖原来的key-value对。

void putAll(Map m):将指定Map中key-value复制到当前Map中。

Object remove(Object key):删除指定key所对应的key-value对,返回被删除key所对应的value,如果key不存在返回null。

boolean remove(Object key, Object value):删除指定key,value所对应的key-value对。如果成功删除,则返回true,否则返回false。

int size():返回该Map中key-value的个数。

Collection values():返回该Map中所有value组成的collection。

Java8为Map新增的方法:

Object compute(Object key, BiFunction remappingFunction):该方法使用remappingFunction根据原key-value对计算一个新的value。只要新的value不为null,就使用新的value覆盖原value;如果原value为null,但新value不为null,则删除原key-value对;如果原value、新value同时为null,那么该方法不改变任何key-value对,直接返回null。

Object computeIfAbsent(Object key, Function mappingFunction):如果传入的key参数在Map中对应的value为null,该方法将使用mappingFunction根据原key、value计算一个新的结果,如果该计算结果不为null,则用该计算结果覆盖原value;如果原Map原来不包括该key,该方法可能会添加一组key-value对。

Object computeIfPresent(Object key, BiFunction remappingFunction):如果传给该方法的key参数在Map中对应的value不为null,该方法将使用remappingFunction根据原key、value计算一个新结果,如果该计算结果不为null,则使用该结果覆盖原来的value;如果计算结果为null,则删除原key-value对。
void forEach(BiConsumer action):该方法是Java8为Map新增的一个遍历key-value对的方法。

Object getOrDefault(Object key, V defaultValue):获取指定的key对应的value。如果该key不存在,则返回defaultValue。

Object merge(Object key, Object value, BiFunction remappingFunction):该方法会先根据key参数获取该Map中对应的value。如果获取的value为null,则直接使用传入的value覆盖原value(在这种情况下,可能会添加一组key-value);如果获取的value不为null,则使用remappingFunction函数根据原value、新value计算一个新的结果,并用新的结果去覆盖原有的value。

Object putIfAbsent(Object key, Object value):该方法会自动检测指定的key对应的value是否为null,如果该key对应的value为null,则使用传入的新value代替原来的null。

Object replace(Object key, Object value):将Map中指定key对应的value替换成新value。如果key在Map中不存在,该方法不会添加key-value对,而是返回null。

Boolean replace(K key, V oldValue, V newValue):将Map中指定的key-value对的原value替换成新value。如果在Map中找到指定的key-value对,则执行替换并返回true,否则返回false。

replaceAll(BiFunction function):该方法使用function对原key-value对执行计算,并将计算结果作为key-value对的value值。

Java8改进的HashMap和Hashtable实现类

HashMap和Hashtable是Map接口的典型实现类。HashMap和Hashtable存在两点典型区别:

1、   Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能更高一些;但如果有多个线程访问同一个Map对象时,使用Hashtable会更好。

2、   Hashtable不允许使用null作为key和value,如果试图将null值放进Hashtable中,将会引发NullPointerException异常,但HashMap可以使用null作为key或value。

PS:

A、   由于HashMap中的key不能重复,所以HashMap中只能最多有一个key-value对的key为null,但可以有无数多个key-value对的value为null。

B、   Hashtable是一个古老的类,他的名字甚至没有遵守java命名规范。与Vector类似,尽量少用Hashtable实现类,即使是需要创建线程安全的Map实现类,也无需使用Hashtable实现类。

C、   HashMap和Hashtable判断两个key值相等的的标准是:两个key通过equals()方法比较返回true,两个key的Hashcode值也相等。

LinkHashMap实现类

LinkHashMap是使用双向链表来维护key-value对的次序(其实只考虑了key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序一致。

使用Properties读写属性文件

Properties是Hashtable的子类,该对象在处理属性文件时十分方便。Prooperties类将Map对象和属性文件关联起来,从而可以将Map对象中的key-value对写入属性文件中,也可以将属性文件中的“属性名=属性值”加载到Map对象中。由于属性文件中的属性名和属性值都是字符串类型,所以Properties里的key、value都是字符串类型的。

该类提供了如下三个方法来修改Properties中的key、value值:

String getProperty(String key):获取Properties中指定属性名对应的属性值,类似于Map中的get(Object key)方法。

String getProperty(String key, String defaultValue): 获取Properties中指定属性名对应的属性值,如果Properties中不存在指定的key时,则该方法指定默认值。

Object setProperty(String key, String value):设置属性值。

它还提供了两个读写属性文件的方法:

Void load(InputStream instream):从属性文件中加载key-value对,将加载到的key-value对追加到Properties中(Properties是Hashtable的子类,他不保证key-value对之间的次序)。

Void store(OutputStream out, String comments):将Properties中的Key-value对输出到指定的属性文件中。

SortedMap接口和TreeMap实现类

正如Set接口派生出SortedSet子接口,SortedSet接口有一个TreeSet实现类一样。Map接口也派生出一个SortedMap子接口,SortedMap接口也有一个TreeMap实现类。

TreeMap就是一个红黑树数据结构,每个key-value对作为红黑树的一个节点。TreeMap在存储key-value对(节点),需要根据key对节点进行排序。TreeMap保证所有的key-value对处于有序状态。TreeMap有两种排序方式:

自然排序:TreeMap的所有key必须实现Comparable接口,而且所有key必须是同一个类的对象,否则会抛出ClassCastException异常。

定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的key进行排序。采用定制排序不要求TreeMap中的key实现Comparator接口。

TreeMap提供了一系列根据key顺序访问key-value对的方法。

Map.Entry firstEntry():返回该Map中最小key对应的key-value对;如果该Map为空,则返回null。

Object firstKey():返回该Map中最小的key值;如果该Map为空,则返回null。

Map.Entry lastEntry():返回该Map中最大的key所对应的key-value对;如果该Map为空或不存在这样的key,则都返回null。

Object lastKey():返回该Map中最大的key;如果该Map为空或不存在这样的key,则返回null。

Map.Entry higherEntry(Object key):返回该Map中大于指定key的后一位key-value对(大于key的最小key)。如果该Map为空,则返回null。

Object higherKey(Object key):返回该Map中大于指定key的最小key;如果该Map为空,则返回null。

Map.Entry lowerEntry(Object key):返回该Map中位于指定key前一位的key-value对(即小于指定key的最大key对应的key-value对);如果该Map为空或不存在这样的key-value对,则返回null。

Object lowerKey(Object key):返回该Map中位于指定key前一位key(小于指定key的最大key)。如果该Map为空或不存在这样的key,则返回null。

NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey,  boolean toInclusive):返回该Map的子Map,其key范围是从fromKey(是否包括有传入的第二个参数决定)到toKey(是否包括由第四个参数决定)。

SortedMap subMap(Object fromKey, Object toKey):返回该Map的子Map,其key值得范围是由fromKey(包括)到toKey(不包括)。

SortedMap tailMap(Object fromKey):返回该Map的子Map,其范围是大于fromKey(包括)的所有key。

NavigableMap tailMap(Object fromKey, boolean inclusive):返回该Map的子Map,其key值的范围是大于fromKey(是否包括取决于第二个参数)的所有key。

SortedMap headMap(Object tokey):返回该Map的子Map,其key的范围是小于tokey(不包括)的所有key。

NavigableMap heapMap(Object tokey, boolean inclusive):返回该Map的子Map,其key的范围是小于tokey(是否包括取决于第二个参数)的所有key。

WeakHashMap实现类

WeakHashMap与HashMap的用法基本相似。与HashMap的区别在于,HashMap的值保留了对实际对象的强引用,这意味着只要该HashMap对象不被销毁,该HashMap中的所有key所引用的对象就不会被垃圾回收,hashMap也不会主动删除这些key-value对;但WeakHashMap只保留了对实际对象的弱引用,这意味着如果WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对。

IdentityHashMap实现类

这个Map实现类的实现机制与HashMap基本类似,但它在处理两个key值相等时比较独特:在IdentityHashMap中,当且仅当两个key严格相等(key1==key2)时,IdentityHashMap才认为这两个key相等;对于普通的HashMap而言,只要key1和key2通过equals()方法比较返回true,且它们的hashCode值相等即可。

EnumMap实现类

EnumMap是一个和枚举类一起使用的Map实现,EnumMap中的所有key都必须是单个枚举类的枚举值。创建EnumMap时必须显式或隐式的指定它对应的枚举类。EnumMap具有以下特征:

1.EnumMap在内部以数组的形式保存,所以这种实现形式十分紧凑高效。

2.EnumMap根据key的自然顺序(即枚举值在枚举类中定义顺序)来维护key-value对的顺序。当程序通过keySet()、entrySet()、values()等方法便利EnumMap是可以看到这些顺序。

3.EnumMap不允许使用null来做为key,但允许null作为value。如果试图使用null来做为key,程序将抛出NullPointerException异常。

4.创建EnumMap时必须指定一个枚举类,从而将该EnumMap和指定枚举类关联起来。

java集合 之 Map集合的更多相关文章

  1. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

  2. 黑马程序员——JAVA基础之Map集合

    ------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...

  3. java学习笔记—集合之Map集合

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...

  4. java集合(List集合与Map集合的数据转换)

    List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 ...

  5. 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法

    ==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...

  6. Java Collection、Map集合总结

    1.Java中的Collection集合总结 Collection |---List(存储有序,可重复) |---ArrayList 底层数据结构是数组,查询快,增删慢. 线程不安全.效率高 |--- ...

  7. Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值

    1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对  思路:  A: 获取所有结婚证的集合  B: 遍历结婚证的集合,得到每一个结婚证  C: 根据结婚证获取丈夫和妻子 转换:  A: ...

  8. Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值

    1. Map集合的遍历  Map -- 夫妻对 思路:  A:把所有的丈夫给集中起来.  B:遍历丈夫的集合,获取得到每一个丈夫.  C:让丈夫去找自己的妻子.  转换:  A:获取所有的键  B:遍 ...

  9. Java基础知识强化之集合框架笔记51:Map集合之Map集合的功能概述与测试

    1. Map集合的功能概述 (1)添加功能 V put(K key,V value):添加元素.这个其实还有另一个功能?先不告诉你,等会讲 如果键是第一次存储,就直接存储元素,返回null 如果键不是 ...

随机推荐

  1. libtool: link: `dftables.lo' is not a valid libtool object

    手误造成的错误: make & make install.&位操作符导致的错误!应该是make && make install.

  2. 【转载】解决 Subversion 的 “svn: Can't convert string from 'UTF-8' to native encoding” 错误

    转载自:http://blog.csdn.net/shaohui/article/details/3996274 在google code 上创建了一个新的项目, 用Windows 下面的tortoi ...

  3. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  4. CSS魔法堂:选择器及其优先级

    一.前言    首先看看一道阿里这期网申的题目吧! 1.找出下面优先级相同的选择器 A. img.thumb:after B.[data-job="frontend"]::firs ...

  5. [ASP.NET]谈谈REST与ASP.NET Web API

    13天的假期结束,赶紧回来充电了 本节目录 Web API简介 自我寄宿 IIS寄宿 调用Web API Web API原理 Web API简介 REST REST是“REpresentational ...

  6. SQL各种连接查询详解(左连接、右连接..)

    一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...

  7. PHP 简单处理--文件下载--文件上传

    文件下载部分 从 down 目录下下载,先获取目录下所有文件,再为每个文件添加download 信息,主要是文件名,后缀的关系. 分两部分,down_1.php 部分初始化,点击download 则跳 ...

  8. math --- CSU 1554: SG Value

    SG Value Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1554 Mean: 一个可重集合,初始为空,每 ...

  9. Insus Search Utility Ver2

    一个搜索组件,虽然不是很强大,但它到现在为止,已经是第二个版本了.前一版本:http://www.cnblogs.com/insus/archive/2011/03/30/1999759.html此版 ...

  10. 解决打印机报错:操作无法完成(错误0x00000709)。

    解决:操作无法完成(错误0x00000709).再次检查打印机名称,并确保打印机已连接到... 上午同时说,网络打印机打印不了,于是首先看一下打印服务器IP是不是给换了,结果没换. 接着尝试重新添加一 ...