JAVA学习总结之Map集合
来源:互联网 发布:安卓投屏软件 airplay 编辑:程序博客网 时间:2024/05/21 06:24
学习之前应该知道:
Set和Map关系十分亲密,Java源码就是先实现了HashMap、TreeMap等集合,然后通过包装一个所有的value都为null的Map集合实现类Set集合类。
Map集合:
1.Map用于保存具有映射关系的数据,因此Map集合里保存着两组数值,一组用于保存Map里的key值,
另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。
2.Map的key不允许重复,即同一个Map对象的任意两个key通过equals方法比较总是返回false。
3.key和value之间存在单向一对一关系。
Hashtable和HashMap:都是Map接口的典型实现类,它们之间的关系完全类似于ArrayList和Vector的关系(使用HashMap存在key冲突时仍然具有较好的性能)
Hashtable和HashMap两点典型区别:
1.Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable性能高一点;
但是如果有多个线程访问同一个Map对象时,使用Hashtable实现类会更好。
2.Hashtbale不允许使用null作为key和value,如果试图把null值放进Hashtable中,会引发空指针异常;
但HashMap可以使用null作为key或value。
注:1.由于HashMap里的key不能重复,所以HashMap里最多只有一个key-value对的key为null,但可以有无数个key-value对的value为null.
Hashtable是一个古老的类,因该尽量少使用,即使需要创建线程安全的Map实现类,也无需使用Hashtable实现类,
可以通过Collections工具类把HashMap变成线程安全的。
1.与HashSet集合不能保证元素的顺序一样,HashMap、Hashtable也不能保证其中的Key-value对的顺序。
类似于HashSet,HashMap、Hashtbale判断两个 key 相等的标准也是:两个key通过equals方法比较返回true,两个key的hashCode值也相等。
HashMap、Hashtbale判断两个 value 相等的比较简单:只要两个对象通过equals()方法比较返回true即可。
2.与HashSet类似,如果使用可变对象作为HashMap、Hashtable的key,并且程序修改了作为key的可变对象,
则也可能出现于HashSet类型的情况:程序再也无法准确访问到Map中被修改过的key.
LinkedHashMap实现类(HashMap的子类):功能是可以记住key-value对的添加顺序。
使用双向链表来维护key-value对的次序(其实只需要考虑key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序保持一致。
1.LinkedHashMap可以避免对HashMap、Hashtbale里的key-value对进行排序(只要插入key-values对是保持顺序即可),同时又避免使用TreeMap所增加的成本。
2.LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能;但因为它以链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能。
各Map性能分析:
1.HashMap和Hashtable的实现机制几乎一模一样,但由于Hashtable是一个古老的线程安全的集合,因此HashMap比Hashtable要快.
2.TreeMap要比HashMap和Hashtable要慢(因为底层采用红黑树管理键值对),但是使用TreeMap的好处是:TreeMap中的键值对总是处于有序状态。
3.LinkedHashMap比HashMap慢一点,因为它需要维护链表来保持Map中的键值对添加顺序。
4.IdentityHashMap性能没有特别出色之处,因为它采用和HashMap相似的实现,只是它使用==(如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同))而不是equals()方法来判断元素相等。
5.EnumMap的性能最好,但它只能使用同一个枚举类的枚举值作为key.
Set和Map关系十分亲密,Java源码就是先实现了HashMap、TreeMap等集合,然后通过包装一个所有的value都为null的Map集合实现类Set集合类。
Map集合:
1.Map用于保存具有映射关系的数据,因此Map集合里保存着两组数值,一组用于保存Map里的key值,
另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。
2.Map的key不允许重复,即同一个Map对象的任意两个key通过equals方法比较总是返回false。
3.key和value之间存在单向一对一关系。
Hashtable和HashMap:都是Map接口的典型实现类,它们之间的关系完全类似于ArrayList和Vector的关系(使用HashMap存在key冲突时仍然具有较好的性能)
Hashtable和HashMap两点典型区别:
1.Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable性能高一点;
但是如果有多个线程访问同一个Map对象时,使用Hashtable实现类会更好。
2.Hashtbale不允许使用null作为key和value,如果试图把null值放进Hashtable中,会引发空指针异常;
但HashMap可以使用null作为key或value。
注:1.由于HashMap里的key不能重复,所以HashMap里最多只有一个key-value对的key为null,但可以有无数个key-value对的value为null.
Hashtable是一个古老的类,因该尽量少使用,即使需要创建线程安全的Map实现类,也无需使用Hashtable实现类,
可以通过Collections工具类把HashMap变成线程安全的。
1.与HashSet集合不能保证元素的顺序一样,HashMap、Hashtable也不能保证其中的Key-value对的顺序。
类似于HashSet,HashMap、Hashtbale判断两个 key 相等的标准也是:两个key通过equals方法比较返回true,两个key的hashCode值也相等。
HashMap、Hashtbale判断两个 value 相等的比较简单:只要两个对象通过equals()方法比较返回true即可。
2.与HashSet类似,如果使用可变对象作为HashMap、Hashtable的key,并且程序修改了作为key的可变对象,
则也可能出现于HashSet类型的情况:程序再也无法准确访问到Map中被修改过的key.
LinkedHashMap实现类(HashMap的子类):功能是可以记住key-value对的添加顺序。
使用双向链表来维护key-value对的次序(其实只需要考虑key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序保持一致。
1.LinkedHashMap可以避免对HashMap、Hashtbale里的key-value对进行排序(只要插入key-values对是保持顺序即可),同时又避免使用TreeMap所增加的成本。
2.LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能;但因为它以链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能。
各Map性能分析:
1.HashMap和Hashtable的实现机制几乎一模一样,但由于Hashtable是一个古老的线程安全的集合,因此HashMap比Hashtable要快.
2.TreeMap要比HashMap和Hashtable要慢(因为底层采用红黑树管理键值对),但是使用TreeMap的好处是:TreeMap中的键值对总是处于有序状态。
3.LinkedHashMap比HashMap慢一点,因为它需要维护链表来保持Map中的键值对添加顺序。
4.IdentityHashMap性能没有特别出色之处,因为它采用和HashMap相似的实现,只是它使用==(如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同))而不是equals()方法来判断元素相等。
5.EnumMap的性能最好,但它只能使用同一个枚举类的枚举值作为key.
阅读全文
0 0
- JAVA学习总结之Map集合
- java集合学习之Map
- java学习之Map集合
- Java学习笔记之集合Collection&Map
- Java 学习之集合框架---Map
- Java学习笔记之集合、Iterator、Map
- java基础学习之集合-Map
- java集合------Map集合总结
- Java集合框架总结之Map集合的使用
- JAVA学习之集合总结
- 黑马程序员 Java学习总结之集合框架(Map篇)
- java map集合学习
- [学习笔记]Java集合框架之Map集合
- [学习笔记]Java集合框架之Map集合
- Java学习之旅--集合的使用(Map集合)
- Java学习笔记之集合(七):Map集合的方法
- Java集合之-Map集合
- java之Map集合
- 关于license
- CF623A Graph and String(二分图染色)
- 检验The Gauss-Bonnet Theorem
- Docker入门
- shell编程,正则表达式介绍,grep命令的使用
- JAVA学习总结之Map集合
- Jetson TX2刷机及安装tensorflow gpu注意事项
- HMM(隐马尔科夫)用于中文分词
- 微信公众号语音解析
- 使用JavaMail创建邮件和发送邮件
- LinuxStudyNote(44)-RPM包校验及校验输出结果分析S.5....T. d分析
- 排序算法详解
- UVA 221 Urban Elevations (离散化)
- 后端 传输 json 数据(导包错误)