Map集合的实现类
2019-05-22 06:30:12来源:博客园 阅读 ()
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信息的说明。
实例:
1 Properties properties=new Properties(); 2 properties.setProperty("name","张三"); 3 //key、value都必须是String 4 properties.setProperty("age","19"); 5 //输出键值对到属性文件,一行一个键值对。第二个参数是对文件所保存信息的说明,会以注释形式输出到属性文件的首行。a.ini默认在项目的根目录下。 6 properties.store(new FileOutputStream("a.ini"),"student info"); 7 //properties中仍有键值对 8 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专门用于操作属性文件。
原文链接:https://www.cnblogs.com/chy18883701161/p/10891876.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- 与JAVA集合相遇 2020-06-11
- Java笔记:集合 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash