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。
hashMap 和 linkedHashMap 的区别和联系的更多相关文章
- HashMap与LinkedHashMap的区别
/** * remark: * HashMap与LinkedHashMap的区别 * 这里必须使用LinkedHashMap: * 原因 ...
- HashMap和LinkedHashMap的区别
参考:https://blog.csdn.net/a822631129/article/details/78520111 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实 ...
- Java - HashTable、HashMap和LinkedHashMap的区别
一般情况下,我们用的最多的是HashMap,在Map 中插入.删除和定位元素,HashMap 是最好的选择.但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好.如果需要输出的顺序和输入的 ...
- TreeMap,HashMap,LinkedHashMap区别,很简单解释
TreeMap,HashMap,LinkedHashMap之间的区别和TreeSet,HashSet,LinkedHashSet之间的区别相似. TreeMap:内部排序. HashMap:无序. L ...
- HashMap和LinkedHashMap区别
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...
- StackOverflow之旅<2>------{HashMap和Hashtable的区别}
问题 在Java中HashMap和Hashtable的区别? 哪一个对于多线程应用程序更好? 回答 Hashtable是同步的,加了synchronized锁,而HashMap不是.没有加synchr ...
- 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...
- java面试题——HashMap和Hashtable 的区别
一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
随机推荐
- 52张扑克牌快速生成js
function* generatePoker() { const points = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']; yield* ...
- ES6学习笔记(一)
‘变量’声明 ES6新增两个声明’变量’的关键字,let和const命令. l let用来声明局部变量 同ES5中var声明的变量不同的是,let声明的变量的作用域范围仅仅是从其声明的地方开始,到其 ...
- Appium 常用方法
锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...
- 微信小程序scroll-view隐藏滚动条方法
在wxss里加入以下代码: ::-webkit-scrollbar{ width: 0; height: 0; color: transparent; } 源链接:https://blog.csd ...
- Windows下sc create命令行添加/创建/修改服务
添加服务: sc create TestService binpath= "D:\TestApp\TestService.exe" 注意:所有的等号和值之间需要一个空格(等号前不要 ...
- C++文件操作:打开文件和写入文件 zz
http://www.weixueyuan.net/view/5825.html 如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望 ...
- Linux->Ubuntu下配置telnet环境
1.首先查看telnet运行状态 netstat -a | grep telnet 输出为空,表示没有开启该服务 2.安装openbsd-inetd apt-get install openbsd-i ...
- shell 脚本中后台执行命令 &
最近遇到一个问题, 执行脚本,脚本调用 一个命令,命令(deamon)是一个守护进程,为了调试,取消了守护进程模式.导致命令后边的其他命令(echo "456")都无法执行. de ...
- February 9 2017 Week 6 Thursday
Happy life lies in a peaceful mind. 幸福的生活存在于心绪的宁静当中. What can be seen as happy life? Maybe the answe ...
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...