Java map详解 - 用法、遍历、排序、常用API等
2015-12-18 15:07
489 查看
概要:
java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。
本文主要介绍java map的初始化、用法、map的四种常用的遍历方式、map的排序以及常用api。
1Map用法
·类型介绍
·类型区别
·Map 初始化
·插入元素
·获取元素
·移除元素
·清空map
2Map
遍历
·初始化数据
·增强for循环遍历
·迭代器遍历
·性能比较
3Map
排序
·HashMap、Hashtable、LinkedHashMap排序
·TreeMap排序
·按value排序(通用)
4常用API
Java 自带了各种 Map 类。这些 Map 类可归为三种类型:
1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现
HashMap
Hashtable
Properties
LinkedHashMap
IdentityHashMap
TreeMap
WeakHashMap
ConcurrentHashMap
2. 专用Map,通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问
java.util.jar.Attributes
javax.print.attribute.standard.PrinterStateReasons
java.security.Provider
java.awt.RenderingHints
javax.swing.UIDefaults
3. 一个用于帮助我们实现自己的Map类的抽象类
AbstractMap
HashMap
最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。
TreeMap
能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable
与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap
保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
Java | 复制
Java | 复制
Java | 复制
Java | 复制
Java | 复制
Java | 复制
使用keySet()遍历
Java | 复制
使用entrySet()遍历
Java | 复制
使用keySet()遍历
Java | 复制
使用entrySet()遍历
Java | 复制
比较方式
分别对四种遍历方式进行10W次迭代,比较用时。
代码
Java | 复制
运行三次,比较结果
第一次
Text | 复制
第二次
Text | 复制
第三次
Text | 复制
平均值
Text | 复制
总结
增强for循环使用方便,但性能较差,不适合处理超大量级的数据。
迭代器的遍历速度要比增强for循环快很多,是增强for循环的2倍左右。
使用entrySet遍历的速度要比keySet快很多,是keySet的1.5倍左右。
注:
TreeMap也可以使用此方法进行排序,但是更推荐下面的方法。
Java | 复制
TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器:
Java | 复制
Java | 复制
java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。
本文主要介绍java map的初始化、用法、map的四种常用的遍历方式、map的排序以及常用api。
| |目录
1Map用法·类型介绍
·类型区别
·Map 初始化
·插入元素
·获取元素
·移除元素
·清空map
2Map
遍历
·初始化数据
·增强for循环遍历
·迭代器遍历
·性能比较
3Map
排序
·HashMap、Hashtable、LinkedHashMap排序
·TreeMap排序
·按value排序(通用)
4常用API
1Map用法
类型介绍
Java 自带了各种 Map 类。这些 Map 类可归为三种类型:1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现
HashMap
Hashtable
Properties
LinkedHashMap
IdentityHashMap
TreeMap
WeakHashMap
ConcurrentHashMap
2. 专用Map,通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问
java.util.jar.Attributes
javax.print.attribute.standard.PrinterStateReasons
java.security.Provider
java.awt.RenderingHints
javax.swing.UIDefaults
3. 一个用于帮助我们实现自己的Map类的抽象类
AbstractMap
类型区别
HashMap最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。
TreeMap
能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable
与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap
保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
Map 初始化
Java | 复制
插入元素
Java | 复制
获取元素
Java | 复制
移除元素
Java | 复制
清空map
Java | 复制
2Map
遍历
初始化数据
Java | 复制
增强for循环遍历
使用keySet()遍历Java | 复制
Java | 复制
迭代器遍历
使用keySet()遍历Java | 复制
Java | 复制
性能比较
比较方式分别对四种遍历方式进行10W次迭代,比较用时。
代码
Java | 复制
第一次
Text | 复制
Text | 复制
Text | 复制
Text | 复制
增强for循环使用方便,但性能较差,不适合处理超大量级的数据。
迭代器的遍历速度要比增强for循环快很多,是增强for循环的2倍左右。
使用entrySet遍历的速度要比keySet快很多,是keySet的1.5倍左右。
3Map
排序
HashMap、Hashtable、LinkedHashMap排序
注:TreeMap也可以使用此方法进行排序,但是更推荐下面的方法。
Java | 复制
TreeMap排序
TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器:Java | 复制
按value排序(通用)
Java | 复制
4常用API
clear() | 从 Map 中删除所有映射 |
remove(Object key) | 从 Map 中删除键和关联的值 |
put(Object key, Object value) | 将指定值与指定键相关联 |
putAll(Map t) | 将指定 Map 中的所有映射复制到此 map |
entrySet() | 返回 Map 中所包含映射的 Set 视图。Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素 |
keySet() | 返回 Map 中所包含键的 Set 视图。删除 Set 中的元素还将删除 Map 中相应的映射(键和值) |
values() | 返回 map 中所包含值的 Collection 视图。删除 Collection 中的元素还将删除 Map 中相应的映射(键和值) |
get(Object key) | 返回与指定键关联的值 |
containsKey(Object key) | 如果 Map 包含指定键的映射,则返回 true |
containsValue(Object value) | 如果此 Map 将一个或多个键映射到指定值,则返回 true |
isEmpty() | 如果 Map 不包含键-值映射,则返回 true |
size() | 返回 Map 中的键-值映射的数目 |
相关文章推荐
- 读《疯狂Java讲义》笔记总结一
- Annotation(三)——Spring注解开发
- Java多线程之捕获异常
- Java文件下载结合多线程
- JVM虚拟机:JDK监控和故障处理工具
- 演示JAVA自带DOM解析XML功能
- 关于生成验证码
- java正则表达式语法详解及其使用代码实例
- Eclipse 查看 jar 文件
- Java关于图片的切割、缩放、类型转换、水印、彩色转黑白处理
- 基本排序_快速排序_Java实现
- java对象序列化
- Java I/O之数据流字符串流 Java I/O之数据流字符串&&字节数组流 DataInputStream :数据输入流允许程序以与机器无关方式从底层&&字节数组流
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
- 深入了解java集群技术
- java 中转换html 实体编码为汉字---unicode编码(\u)、十进制(&#)、十六进制(&#x)
- Java创建和解析Json数据方法(二)——org.json包的使用
- 169 Majority Element [LeetCode Java实现]
- 什么是JAVA构造方法
- Java创建和解析Json数据方法(一)——Json知识