服务器之家

服务器之家 > 正文

java HashMap,TreeMap与LinkedHashMap的详解

时间:2020-07-08 13:56     来源/作者:月光轩辕-

 java HashMap,TreeMap与LinkedHashMap的详解

今天上午面试的时候 问到了Java,Map相关的事情,我记错了HashMap和TreeMap相关的内容,回来赶紧尝试了几个demo理解下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package Map;
 
import java.util.*;
 
public class HashMaps {
  public static void main(String[] args) {
    Map map = new HashMap();
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");
    map.put("d", "ddd");
 
    Iterator iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
      Object key = iterator.next();
      System.out.println("map.get(key) is :" + map.get(key));
    }
 
    Hashtable tab = new Hashtable();
    tab.put("a", "aaa");
    tab.put("b", "bbb");
    tab.put("c", "ccc");
    tab.put("d", "ddd");
    Iterator iterator_1 = tab.keySet().iterator();
    while (iterator_1.hasNext()) {
      Object key = iterator_1.next();
      System.out.println("tab.get(key) is :" + tab.get(key));
    }
 
    TreeMap tmp = new TreeMap();
    tmp.put("a", "aaa");
    tmp.put("b", "bbb");
    tmp.put("c", "ccc");
    tmp.put("d", "ddd");
    tmp.put("a", "aba");
    Iterator iterator_2 = tmp.keySet().iterator();
    while (iterator_2.hasNext()) {
      Object key = iterator_2.next();
      System.out.println("tmp.get(key) is :" + tmp.get(key));
    }
     
     
    LinkedHashMap<String ,Integer> linkedHashMap = new LinkedHashMap<String,Integer>();
    linkedHashMap.put("dasdsa", 1);
    linkedHashMap.put("gdsf",2);
    linkedHashMap.put("texvdfd", 3);
    linkedHashMap.put("bdada", 4);
     
    linkedHashMap.put("gdsf",3);
    for(String temp : linkedHashMap.keySet()){
      System.out.println(temp);
    }
     
  }
 
}

Map不同于 List, 底层使用 键值对的形式存储数据 Map.Entry是内部的一个子条目,Map的不同实现 对键值对的索引方案不同
HashMap 本身是用hash函数对键值做索引   我们不能确定最后键值的顺序

      但是存在一个有趣的现象 就是在以Integer作为键值对的时候,当位数为1位时   键值是按照从小到大排的,位数上升到两位的时候 就可能存在问题

TreeMap  内部存在着一个平衡树来存储着键值索引,TreeMap 把键值按照比较函数排序,我推测内部是可能存在着一个AVLtree

LinkedHashMap   这个存在着一个特性是,键值对是按照插入顺序排序的,如果存在着重复插入,以首次插入的顺序来记,网上的一种说法是该结构内部存在着2重hash

   一个解决顺序问题,一个解决存储问题,正确性待确认

HashMap和TreeMap  是最常用的两种Map结构,  一般来说HashMap的效率比较高,也最为常见,如果我们需要键值有序的话,我们才会用到TreeMap

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/u010953266/article/details/45933883

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部