hashMap 和 linkedHashMap 的区别和联系

直接举例说明。

运行如下例子程序

 1 mport java.util.HashMap;
 2 import java.util.Iterator;
 3 import java.util.LinkedHashMap;
 4 import java.util.Map;
 5 
 6 /**
 7  * Created by longger on 2017/11/16.
 8  */
 9 public class AboutMap {
10 
11     public static void main(String[] args) {
12         Map<String,String> linkedHashMap = new LinkedHashMap<>();
13         linkedHashMap.put("100","屠龙");
14         linkedHashMap.put("22","倚天");
15         linkedHashMap.put("1","zzz");
16         System.out.println("***************LinkedHashMap****************");
17 
18         for(Iterator it = linkedHashMap.keySet().iterator();it.hasNext();){
19             Object key = it.next();
20             System.out.println(key + "=" + linkedHashMap.get(key));
21         }
22 
23         Map<String,String> map = new HashMap<>();
24         map.put("100","屠龙");
25         map.put("22","倚天");
26         map.put("1","zzz");
27 
28         System.out.println("*********HashMap*****");
29         for(Iterator it = map.keySet().iterator();it.hasNext();){
30             Object key = it.next();
31             System.out.println(key + "=" + map.get(key));
32         }
33     }
34 }

运行结果:

***************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。

原文地址:https://www.cnblogs.com/regnol/p/7847257.html