Map集合的实现类
Map的继承关系:

Map接口的常用实现类:
1、HashMap、Hashtable(t是小写)
HashMap不是线程安全的,key、value的值都可以是null。
Hashtable是线程安全的,key、value的值都不能是null。
HashMap、Hashtable都是无序的。
如果要使用自定义的类(未继承Java自带的类)作为key,需要重写自定义类的hashCode()、equals()来保证集合中没有重复的key。类名中含hash的集合,都要这样。
因为不必保证线程安全,所以HaspMap性能比Hashtable略高。
Hashtable是很古老的一个类,命名不规范,问题较多。尽量少用Hashtable。即使要创建线程安全的Map,也尽量不要使用Hashtable,可以使用Collections工具类把HashMap变成线程安全的。
2、LinkedHashMap
LinkedHashMap是HashMap的子类,使用一个双向链表来维护键值对的顺序(与添加顺序相同),维护的是key的顺序。
存储、查找仍是使用hashCode值来索引,遍历(迭代)才使用链表,就是说遍历时的顺序和添加元素的顺序相同。
因为内部维护了一个链表,所以查找、存储时HashMap性能高于LinkedHashMap,但遍历集合时LinkedHashMap性能较好。
3、Properties
Properties是Hashtable的子类,在处理属性文件时特别方便。Properties的key、value都必须是String。
Properties类的常用方法:
String getProperty(String key)
String getProperty(String key,String defaultValue) key不存在时,把默认的值作为value返回
Object setProperty(String key,String value) 设置属性值。相当于Hashtable的put()
void load(InputStream is) 从属性文件(输入流)中加载键值对到Properties对象
void store(OutputStream os,String info) 把properties中的键值对写到输出流中(一般是属性文件)。第二个参数是对properties信息的说明。
实例:
Properties properties=new Properties();
properties.setProperty("name","张三");
//key、value都必须是String
properties.setProperty("age","19");
//输出键值对到属性文件,一行一个键值对。第二个参数是对文件所保存信息的说明,会以注释形式输出到属性文件的首行。a.ini默认在项目的根目录下。
properties.store(new FileOutputStream("a.ini"),"student info");
//properties中仍有键值对
System.out.println(properties); //{name=张三, age=19}
4、TreeMap
TreeMap类是Map接口的子接口SortedMap的实现类,用红黑树来存储元素,保持集合的有序(并不是添加顺序,而是按key的值排列)。
TreeMap的2中排序方式:自然排序(默认)、定制排序。
TreeMap的键值对(其实是key)总是处于有序状态,调用keySet()获取key的Set,再使用toArray()转化为数组,这个数组就是有序的。
5、EnumMap
EnumMap的key都必须是同一个枚举类的实例,元素的排列顺序与枚举类中的顺序保持一致。
性能分析:
EnumMap无需维护什么,性能最好。
TreeMap一般要比HashMap、Hashtable要慢,尤其是添加、删除键值对时,因为内部维护红黑树开销很大。
Hashtable线程安全,所以HashMap性能要高于Hashtable。而Hashtable问题较多,一般不使用。
LinkedHashMap内部要维护一个链表,所以HashMap性能一般要高于LinkedHashMap。HashMap底层采用数组存储键值对,查询效率极高。大量删除元素、遍历集合时,LinkedHashMap性能较好。
Properties专门用于操作属性文件。
Map集合的实现类的更多相关文章
- map集合类型/实体类类型的参数
map集合类型的参数 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合, 将这些数据放在map中 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要 ...
- Java基础知识强化之集合框架笔记58:Map集合之LinkedHashMap类的概述
1. LinkedHashMap类的概述 LinkedHashMap:Map接口的哈希表(保证唯一性) 和 链接(保证有序性)列表实现,具有可预知的迭代顺序. 2. 代码示例: package cn. ...
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- Java Map 集合实现类
Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...
- Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌
1.Map集合概述和特点 * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多 ...
- day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)
Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类 实现了 set接口 唯一 ...
- (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
1.Map集合(重点)1.1 常用的方法 Set<Map.Entry<K,V>> entrySet() - 用于将Map集合转换为Set集合. 其中Map.Entry<K ...
- Collections工具类、Map集合、HashMap、Hashtable(十八)
1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和 ...
- Map 集合 和 String 字符串相互转换工具类
package com.skynet.rimp.common.utils.util; import java.util.Arrays; import java.util.HashMap; import ...
随机推荐
- #import @import #include
1.在xcode5以后 ,Replace #import <Cocoa/Cocoa.h> with @import Cocoa; 在这之前 必须手动设置一下才能用. 2.#import 与 ...
- Ubuntu安装mycli,让mysql命令行可以自动提示
安装mycli 1.确保有安装python 2.确保有安装pip 3.进入su模式,以管理员身份安装 4.安装 pip install -U mycli 5.登录 mycli -u root 很好很强 ...
- codeforces 459 A. Pashmak and Garden 解题报告
题目链接:http://codeforces.com/problemset/problem/459/A 题目意思:给出两个点的坐标你,问能否判断是一个正方形,能则输出剩下两点的坐标,不能就输出 -1. ...
- http的安全方法和幂等性
最近在研究http,看到http的安全方法和幂等性部分,不太明白,尤其是"post方法是非幂等的"不理解,进过查资料,找到以下两篇有价值的文章,特转过来! 理解HTTP幂等性 转自 ...
- [Java] static, final
1.静态成员 静态成员独立于类的对象,先于对象的存在而存在.无论创建了类的多少个对象,静态成员都只有一个实例空间.一个静态变量被同一个类的所有对象共享.当改变了其中一个对象的静态变量时,其余对象的静态 ...
- iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!
在iOS开发中经常使用NSInteger和NSUInteger,而在其他的类似于C++的语言中,我们经常使用的是int.unsigned int.我们知道iOS也可以使用g++编译器,那么它们之间是否 ...
- ES6 模板编译
顾名思义,就是用反引号编写一个模板字符串, 用echo将模板转为javascrip表达式字符串, 用正则将基础字符串转为想要字符串 将代码封装在函数中返回: 注: 用到es6属性${} var tem ...
- python的日志logging模块性能以及多进程
写在前面: 日志是记录操作的一种好方式.但是日志,基本都是基于文件的,也就是要写到磁盘上的.这时候,磁盘将会成为一个性能瓶颈.对于普通的服务器硬盘(机械磁盘,非固态硬盘),python日志的性能瓶颈是 ...
- 伪元素 first-letter
::after, ::before, ::backdrop, ::first-letter,::first-line, ::selection(css3)是伪元素, :active, :focus, ...
- 安装JDK+Eclipse+Maven+Git/Gitee(windows系统和linux系统)
1. 安装JDK 官网下载 下载java SE 下载 Java SE 7 1.1 windows配置jdk windows配置jdk 1.2 Ubuntu配置jdk Ubuntu 安装 JDK 7 / ...