当前位置: 移动技术网 > IT编程>开发语言>Java > Map集合的实现类

Map集合的实现类

2019年05月20日  | 移动技术网IT编程  | 我要评论
Map的继承关系: Map接口的常用实现类: 1、HashMap、Hashtable(t是小写) HashMap不是线程安全的,key、value的值都可以是null。 Hashtable是线程安全的,key、value的值都不能是null。 HashMap、Hashtable都是无序的。 如果要使 ...

 

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专门用于操作属性文件。

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网