共同点:

HashMap,LinkedHashMap,TreeMap都属于Map;Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。

不同点:

1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。

2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

3. LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.  (应用场景:购物车等需要顺序的)

代码实例:

  1. package com.alibaba.sample.petstore.web.store.module.screen;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.LinkedHashMap;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import java.util.TreeMap;
  9.  
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import org.springframework.beans.factory.annotation.Autowired;
  13.  
  14. public class ViewCart {
  15. @Autowired
  16. private HttpServletResponse response;
  17.  
  18. public void execute() throws Exception {
  19. this.useHashMap();
  20. this.useTreeMap();
  21. this.useLikedHashMap();
  22. }
  23.  
  24. public void useHashMap() throws Exception {
  25. response.getWriter().println("------无序(随机输出)------");
  26. Map<String, String> map = new HashMap<String, String>();
  27. map.put("1", "Level 1");
  28. map.put("2", "Level 2");
  29. map.put("3", "Level 3");
  30. map.put("a", "Level a");
  31. map.put("b", "Level b");
  32. map.put("c", "Level c");
  33. Iterator<Entry<String, String>> it = map.entrySet().iterator();
  34. while (it.hasNext()) {
  35. Entry<String, String> e = it.next();
  36. response.getWriter().println("Key: " + e.getKey() + "; Value: " + e.getValue());
  37. }
  38. }
  39.  
  40. // 有序(默认排序,不能指定)
  41. public void useTreeMap() throws Exception {
  42. response.getWriter().println("------有序(但是按默认顺充,不能指定)------");
  43. Map<String, String> map = new TreeMap<String, String>();
  44. map.put("1", "Level 1");
  45. map.put("2", "Level 2");
  46. map.put("3", "Level 3");
  47. map.put("a", "Level a");
  48. map.put("b", "Level b");
  49. map.put("c", "Level c");
  50. Iterator<Entry<String, String>> it = map.entrySet().iterator();
  51. while (it.hasNext()) {
  52. Entry<String, String> e = it.next();
  53. response.getWriter().println("Key: " + e.getKey() + "; Value: " + e.getValue());
  54. }
  55. }
  56.  
  57. public void useLikedHashMap() throws Exception {
  58. response.getWriter().println("------有序(根据输入的顺序输出)------");
  59. Map<String, String> map = new LinkedHashMap<String, String>();
  60. map.put("1", "Level 1");
  61. map.put("2", "Level 2");
  62. map.put("3", "Level 3");
  63. map.put("a", "Level a");
  64. map.put("b", "Level b");
  65. map.put("c", "Level c");
  66. Iterator<Entry<String, String>> it = map.entrySet().iterator();
  67. while (it.hasNext()) {
  68. Entry<String, String> e = it.next();
  69. response.getWriter().println("Key: " + e.getKey() + "; Value: " + e.getValue());
  70. }
  71. }
  72. }

返回结果:

  1. ------无序(随机输出)------
  2. Key: 3; Value: Level 3
  3. Key: 2; Value: Level 2
  4. Key: 1; Value: Level 1
  5. Key: b; Value: Level b
  6. Key: c; Value: Level c
  7. Key: a; Value: Level a
  8. ------有序(但是按默认顺充,不能指定)------
  9. Key: 1; Value: Level 1
  10. Key: 2; Value: Level 2
  11. Key: 3; Value: Level 3
  12. Key: a; Value: Level a
  13. Key: b; Value: Level b
  14. Key: c; Value: Level c
  15. ------有序(根据输入的顺序输出)------
  16. Key: 1; Value: Level 1
  17. Key: 2; Value: Level 2
  18. Key: 3; Value: Level 3
  19. Key: a; Value: Level a
  20. Key: b; Value: Level b
  21. Key: c; Value: Level c

HashMap、LinkedHashMap和TreeMap对比的更多相关文章

  1. HashMap,LinkedHashMap,TreeMap对比

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  2. Android——ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap

     ArrayList .LinkList.List 区别 & 迭代器iterator的使用 & HashMap.Hashtable.LinkedHashMap.TreeMap 一.几个 ...

  3. HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap的区别

    Map是Java最常用的集合类之一.它有很多实现类,我总结了几种常用的Map实现类,如下图所示.本篇文章重点总结几个Map实现类的特点和区别: 特点总结: 实现类 HashMap LinkedHash ...

  4. HashMap、HashTable、LinkedHashMap和TreeMap用法和区别

    Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap.HashTable.LinkedHashMap和TreeMap.本节实例主要介绍这4中实例的用 ...

  5. Java中HashMap,LinkedHashMap,TreeMap的区别[转]

    原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...

  6. HashMap,LinkedHashMap,TreeMap的区别(转)

    Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快 ...

  7. map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别

    前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...

  8. Java HashMap,LinkedHashMap,TreeMap

    Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...

  9. HashMap,LinkedHashMap,TreeMap之间的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap . Map 主要用于存储键( ...

随机推荐

  1. 关于在C#中对函数重载理解

    函数重载是个什么概念,才接触的这个概念的时候我也是完全昏了,还在自己看看了书后就理解了.那什么是函数重载呢?我个人理解的是在同一个作用域下有多个同名的函数,但是他们的形参的类型是不同的,或者参数个数是 ...

  2. es6中对象的一些操坐

    变量的赋值 key值得构建 对象的严格检测 对象的合并 1.变量的赋值: let name='宋宇',age='17岁': let obj={name,age} //快速的将变量引入到对象中去. 2. ...

  3. HDU 6166 Senior Pan (最短路变形)

    题目链接 Problem Description Senior Pan fails in his discrete math exam again. So he asks Master ZKC to ...

  4. phpcms 大杂烩

    问题1:栏目页伪静态(不生成HTML)时,URL规则中{$categorydir}{$catdir}仍显示为{$categorydir}{$catdir}解决方法. 第一步:打开phpcms\modu ...

  5. vmware漏洞之四:简评USE-AFTER-SILENCE: EXPLOITING A QUIETLY PATCHED UAF IN VMWARE

    转:https://www.zerodayinitiative.com/blog/2017/6/26/use-after-silence-exploiting-a-quietly-patched-ua ...

  6. 如何求先序排列和后序排列——hihocoder1049+洛谷1030+HDU1710+POJ2255+UVA548【二叉树递归搜索】

    [已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和 ...

  7. Linux命令之who

    who [选项] … [FILE | ARG1 ARG2] 打印有关当前登录用户的信息. (1).选项 -a,--all 同-b –d –login –p –r –t –T -u -b,--boot ...

  8. 第7天-javascript内置对象

    数组相关方法 concat 用来连接多个数组 <script> var a = [1,2,3]; var b = [3,4,5]; var c = a.concat(b); console ...

  9. EXISTS运算符

    和IN.ANY.ALL等运算符不同,EXISTS运算符是单目运算符,它不与列匹配,因此它也不要求待匹配的集合是单列的.EXISTS运算符用来检查每一行是否匹配子查询,可以认为EXISTS就是用来测试子 ...

  10. 有的系统区apk需要对其系统签名,才能正常使用。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 向方案公司索要platform.x509.pem 和platform.pk8这两个文件. ...