hashMap 和 linkedHashMap 的区别和联系
直接举例说明。
运行如下例子程序
mport java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map; /**
* Created by longger on 2017/11/16.
*/
public class AboutMap { public static void main(String[] args) {
Map<String,String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("100","屠龙");
linkedHashMap.put("22","倚天");
linkedHashMap.put("1","zzz");
System.out.println("***************LinkedHashMap****************"); for(Iterator it = linkedHashMap.keySet().iterator();it.hasNext();){
Object key = it.next();
System.out.println(key + "=" + linkedHashMap.get(key));
} Map<String,String> map = new HashMap<>();
map.put("100","屠龙");
map.put("22","倚天");
map.put("1","zzz"); System.out.println("*********HashMap*****");
for(Iterator it = map.keySet().iterator();it.hasNext();){
Object key = it.next();
System.out.println(key + "=" + map.get(key));
}
}
}
运行结果:
***************LinkedHashMap****************
100=屠龙
22=倚天
1=zzz
*********HashMap*****
22=倚天
100=屠龙
1=zzz
从结果来分析,hashMap 存储数据不是顺序存储的,存储位置并不确定。
linkedHashMap 存储数据,数据位置不会发生变化。
作为拓展,可以继续理解Map.
map这个接口有四个实现类,分别是 HashMap 、HashTable、LinkedHashMap、TreeMap。
HashMap,存储键值对。根据键得到值,因此不允许键(key)重复,值(value)可以重复。
HashMap 的 特点:
1.HashMap 具有很快的访问速度。 put进去的数据,存储位置是不确定的。
2.hashMap 键 key 是唯一的,不允许重复,并且 只允许一个key 为 null.允许 多个value 值相同,且为null.
3.HashMap 不是同步的,即多个进程同事操作HashMap 会产生数据不一致的问题。是HashMap 同步 可以 使用 Collections的synchronizedMap 方法,对hashMap 进行转换处理,使其拥有同步能力。或者直接使用 ConcurrentHashMap。
HashTable的特点
HashTable 和 HashMap 都是继承 Dictionary 类。方法和属性一致。
区别在于:
1.HashTable 不允许 key 或者 value 为 null.
2.HashTable 是线程同步的,因此在写入时,速度会慢一些。
LinkedHashMap 特点
LinkedHashMap是 HashMap的一个子类。对HashMap的一个拓展。
1.linkedHashMap 保存了记录的存储顺序。在使用 iterator 遍历是,先输出的是先 put进去的记录。
2.遍历时,会比HashMap慢。但是,在一种情况下例外,HashMap容量很大,里面的实际数据不是很多,LinkedHashMap遍历速度会快些。这是因为LinkedHashMap遍历数据时,只关注实际存在的数据,和容量大小无关。
TreeMap
TreeMap 实现了SortMap 接口。
TreeMap,对存储的数据,会按照Key 进行排序。默认是按照key值升序排序。也可以指定比较器。当使用Iterator遍历时,得到的结果是排序后的结果。
总结:
选择了一个满足功能的数据结构之后,然后关注点就在于效率。
异步和排序都会影响速度。异步会影响数据的存取速度。排序会影响数据的遍历速度。
因此,在没有同步和排序情况下面,用的最多是HashMap,它存储速度快。如果要求数据存入顺序和输出顺序一致,可以使用linkedHashMap。如果对数据需要进行排序,可以使用TreeMap.用到同步是而且要求存入的数据不能有null值,可以使用HashTable。
最新文章
- ASP.NET Core 中间件详解及项目实战
- TomCat的安装与配置方法
- Python之Web框架Django
- linux 搜索相关命令(2)
- SQL 日期转换(阳历转阴历)
- Trac与Apache的配合
- MaidSafe.net,一个完全去中心的化的云存储系统
- digitalocean开通德国法兰克福机房,40Gb带宽,支持IPv6
- JS中new的运行方式
- 济南清北学堂游记 Day 2.
- Python系列文章
- Android破解学习之路(九)—— 练手破解游戏集合
- 推荐写作平台gitbook&mdash;&mdash;让我们换一种形式写作
- 题解——洛谷P4767 [IOI2000]邮局(区间DP)
- 将Vue-cli搭建的项目改造成多页面应用时对项目结构和配置的调整
- Flask 邮件发送
- 自制小工具含源码——SPTC上海交通卡余额查询
- 2014年王道论坛研究生机试练习赛(二)set 2 货币问题
- ballerina 学习三 根据swagger 以及protobuf 生成code
- 68、 FragmentPagerAdapter+ViewPager实现Tab