[java] 常用map的比较
来源:互联网 发布:自由行网站 知乎 编辑:程序博客网 时间:2024/06/05 16:59
最近改代码的时候想要找一个get 和 put 方法效率比较的map,所以常看了1.6的api,现作出如下的比较:
LinkedHashMap
HashMap
TreeMap
IdentityHashMap
EnumMap
实现原理
1. 双向列表和hash
2. 维护了一个key的双向列表
3.
hash
红黑树
使用引用相等的比较法则,而不是对象相等,也就是引用的要是内存中的统一物理地址
chaining hash 实现(http://oopweb.com/Algorithms/Documents/PLDS210/Volume/hash_tables.html)
1. key的值必须是统一个枚举类型
2. 数组实现
线程安全
否
否
否
否
否
元素的顺序
1. KEY的遍历顺序就是插入的顺序
2. 重新插入同一个key值是不会影响它的位置
3.
元素的顺序不一定一直一样
插入的元素都是按一定顺序排序的,可自定义比较的方法
元素的顺序不一定一直一样
元素的顺序万为枚举类型声明的顺序
一致性
iterator被创建后,除了通过iterator的方法修改map,其他形式的修改都会导致iterator报ConcurrentModificationException的异常,但是这个也不是可靠的
iterator被创建后,除了通过iterator的方法修改map,其他形式的修改都会导致iterator报ConcurrentModificationException的异常,但是这个也不是可靠的
iterator被创建后,除了通过iterator的方法修改map,其他形式的修改都会导致iterator报ConcurrentModificationException的异常,但是这个也不是可靠的
iterator被创建后,除了通过iterator的方法修改map,其他形式的修改都会导致iterator报ConcurrentModificationException的异常,但是这个也不是可靠的
创建iterator后改变map的值,也不会有异常,一致性不能保证
key 和 value的取值
允许key 和value为null
允许key 和value为null
key不允许为null,value可以是null
允许key 和value为null
不允许key 为null,value可以为null
其他
用这个map重新生成一个key顺序一样的map,不管这个map的实现是什么,如(new LinkedHashMap(XXXMap)),这样生成的map元素顺序和原来一致
1. 初始的容量和负载因子影响性能,默认的负载因子是0.75,增大这个值减少了使用的空间,但是增加了get 和 set 的时间
2. get 和 put 的时间复杂度为O(1)
1. get put remove的时间复杂度为O(log(n))
1. Map的大小是重要的性能指标,如果超过map最大的范围,那么要花很大的代价去加长这个map
2. 比HashMap性能好
- [java] 常用map的比较
- Java List Map Set 常用结构比较
- Map 几个常用方法的比较
- java map对象的效率比较
- Java里多个Map的性能比较
- java 几个Map的性能比较
- java与c++的map使用比较
- JAVA Map的四种遍历比较
- Java 中Map与数组的比较
- java常用的比较方法
- java常用数据结构的比较
- Java遍历Map的常用方法
- java中Map的常用方法
- Java 遍历Map的常用方法
- JAVA中Map集合常用的方法
- JAVA中Map接口的常用方法
- 比较Map的性能
- 比较Map的遍历
- mathematica 7.0 破解注册安装全过程
- VC雕虫小技集(二)
- sdf
- 从windows到*nix(六) 程序开发
- MeshDeformer进度日志及开发计划
- [java] 常用map的比较
- CListCtrl的用法
- .net字符串转成日期
- 大数量的问题
- JS小知识
- VC雕虫小技集(三)
- c++中的string用法
- 冷
- 软件性能测试中有关并发用户数、在线用户数等几个概念的说明