java集合 之 Map集合
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集合的更多相关文章
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- 黑马程序员——JAVA基础之Map集合
------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...
- 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 ...
- java集合(List集合与Map集合的数据转换)
List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 ...
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- Java Collection、Map集合总结
1.Java中的Collection集合总结 Collection |---List(存储有序,可重复) |---ArrayList 底层数据结构是数组,查询快,增删慢. 线程不安全.效率高 |--- ...
- Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值
1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对 思路: A: 获取所有结婚证的集合 B: 遍历结婚证的集合,得到每一个结婚证 C: 根据结婚证获取丈夫和妻子 转换: A: ...
- Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值
1. Map集合的遍历 Map -- 夫妻对 思路: A:把所有的丈夫给集中起来. B:遍历丈夫的集合,获取得到每一个丈夫. C:让丈夫去找自己的妻子. 转换: A:获取所有的键 B:遍 ...
- Java基础知识强化之集合框架笔记51:Map集合之Map集合的功能概述与测试
1. Map集合的功能概述 (1)添加功能 V put(K key,V value):添加元素.这个其实还有另一个功能?先不告诉你,等会讲 如果键是第一次存储,就直接存储元素,返回null 如果键不是 ...
随机推荐
- libtool: link: `dftables.lo' is not a valid libtool object
手误造成的错误: make & make install.&位操作符导致的错误!应该是make && make install.
- 【转载】解决 Subversion 的 “svn: Can't convert string from 'UTF-8' to native encoding” 错误
转载自:http://blog.csdn.net/shaohui/article/details/3996274 在google code 上创建了一个新的项目, 用Windows 下面的tortoi ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- CSS魔法堂:选择器及其优先级
一.前言 首先看看一道阿里这期网申的题目吧! 1.找出下面优先级相同的选择器 A. img.thumb:after B.[data-job="frontend"]::firs ...
- [ASP.NET]谈谈REST与ASP.NET Web API
13天的假期结束,赶紧回来充电了 本节目录 Web API简介 自我寄宿 IIS寄宿 调用Web API Web API原理 Web API简介 REST REST是“REpresentational ...
- SQL各种连接查询详解(左连接、右连接..)
一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...
- PHP 简单处理--文件下载--文件上传
文件下载部分 从 down 目录下下载,先获取目录下所有文件,再为每个文件添加download 信息,主要是文件名,后缀的关系. 分两部分,down_1.php 部分初始化,点击download 则跳 ...
- math --- CSU 1554: SG Value
SG Value Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1554 Mean: 一个可重集合,初始为空,每 ...
- Insus Search Utility Ver2
一个搜索组件,虽然不是很强大,但它到现在为止,已经是第二个版本了.前一版本:http://www.cnblogs.com/insus/archive/2011/03/30/1999759.html此版 ...
- 解决打印机报错:操作无法完成(错误0x00000709)。
解决:操作无法完成(错误0x00000709).再次检查打印机名称,并确保打印机已连接到... 上午同时说,网络打印机打印不了,于是首先看一下打印服务器IP是不是给换了,结果没换. 接着尝试重新添加一 ...