今天学习Map集合时书上说HashMap是无序的,TreeMap是有序的(有序无序是针对key的),但是实际去敲的时候发现不是这样,有时HashMap是有序的,有时TreeMap是无序的。于是就做了以下测试来探究:

测试代码:

         //第一组测试:HashMap和TreeMap的key都是String类型的Map<String, Integer> hashMap = new HashMap<String, Integer>();hashMap.put("8", 3);hashMap.put("9", 2);hashMap.put("10", 6);hashMap.put("11", 2);hashMap.put("12", 6);System.out.println("第一组测试:HashMap和TreeMap的key都是String类型的");System.out.println("HashMap:");System.out.println(hashMap);Map<String, Integer> treeMap = new TreeMap<String, Integer>();treeMap.put("8", 399);treeMap.put("9", 67);treeMap.put("10", 2);treeMap.put("11", 67);treeMap.put("12", 2);System.out.println("TreeMap:");System.out.println(treeMap);System.out.println();//第二组测试:HashMap和TreeMap的key都是Integer类型的Map<Integer, Integer> hashMap2 = new HashMap<Integer, Integer>();hashMap2.put(9, 67);hashMap2.put(10, 2);hashMap2.put(8, 399);hashMap2.put(11, 67);hashMap2.put(12, 2);System.out.println("第二组测试:HashMap和TreeMap的key都是Integer类型的");System.out.println("HashMap:");System.out.println(hashMap2);Map<Integer, Integer> treeMap2 = new TreeMap<Integer, Integer>();treeMap2.put(9, 67);treeMap2.put(10, 2);treeMap2.put(8, 399);treeMap2.put(11, 67);treeMap2.put(12, 2);System.out.println("TreeMap:");System.out.println(treeMap2);System.out.println();//第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母Map<String, Integer> hashMap3 = new HashMap<String, Integer>();hashMap3.put("apple", 1);hashMap3.put("orange", 2);hashMap3.put("pear", 3);System.out.println("第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母");System.out.println("HashMap:");System.out.println(hashMap3);Map<String, Integer> treeMap3 = new TreeMap<String, Integer>();treeMap3.put("apple", 1);treeMap3.put("orange", 2);treeMap3.put("pear", 3);System.out.println("TreeMap:");System.out.println(treeMap3);

运行结果:

第一组测试:HashMap和TreeMap的key都是String类型的
HashMap:
{11=2, 12=6, 8=3, 9=2, 10=6}
TreeMap:
{10=2, 11=67, 12=2, 8=399, 9=67}第二组测试:HashMap和TreeMap的key都是Integer类型的
HashMap:
{8=399, 9=67, 10=2, 11=67, 12=2}
TreeMap:
{8=399, 9=67, 10=2, 11=67, 12=2}第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母
HashMap:
{orange=2, apple=1, pear=3}
TreeMap:
{apple=1, orange=2, pear=3}

通过测试可以总结出:

当key值是Integer类型时,HashMap和TreeMap都是“有序”的;
当key值是String类型的数字时,HashMap和TreeMap都是“无序”的;
当key值是String类型的字母时,HashMap是“无序”的,TreeMap是有序的。

后来又去查了一下TreeMap是按照什么来排序的,结果:TreeMap按照key的字典顺序来排序(升序)
这样就对上了,之前感觉当key值是String类型的数字时,HashMap和TreeMap都是“无序”的,是因为如果按照数字排序的话确实是无序的,但是TreeMap所谓的有序并不是按照数字顺序,而是字典顺序。

HashMap无序?TreeMap有序?相关推荐

  1. 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...

  2. HashMap、TreeMap、Hashable和LinkedHashMap

    Map是最重要的数据结构之一.开始会告诉怎么用HashMap.TreeMap.Hashtable和LinkedHashMap 1.Map概述 在Java SE中有4种Map的实现:HashMap.Tr ...

  3. HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.HashMap.TreeMap都继承AbstractMap抽象类:TreeMap实现SortedMap接口,所以TreeM ...

  4. Map集合HashMap,TreeMap

    Map集合没有继承Collection接口,其提供的是key到value的映射.Map集合中不能包含相同的key.每个key只能映射一个value.key还决定存储对象在映射中的存储位置,但不是有ke ...

  5. java:集合(Collection【List(ArrayList Vector LinkedList)、set】、Map【hashMap、treeMap、hashtable、properties】)

    目录 集合的框架体系 一.Collection接口和常用方法 1.1   List接口和常用方法 1.1.1   ArrayList底层结构和源码分析 1.1.2 Vector底层结构 1.1.3 L ...

  6. Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap

    一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...

  7. 面试:如何决定使用 HashMap 还是 TreeMap?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 问:如何决定使用 HashMap 还是 TreeMap? 介绍 T ...

  8. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

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

  9. 【面试题】使用 HashMap 还是 TreeMap

    基本介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的:TreeMap的实现是基于红黑树结 ...

最新文章

  1. 文科学业水平测试题软件,学业水平测试:文科备战理科篇
  2. red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本
  3. [js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件?
  4. java 父类 new 子类
  5. Nexus1000v部署
  6. 济南python工资一般多少-Python火到天际,可是为啥找工作这么难?
  7. 一次和公司总监的聊天...
  8. 微信小游戏开发指南(二)微信小游戏常见问题解答
  9. 我们是如何优化英雄联盟的代码的
  10. CEOI2017 D1T3 mousetrap 树形dp+二分答案
  11. 源码:winamp播放器 C++
  12. 电影《阿凡达》观后感
  13. windows合成pfx
  14. 【源码】自主机器人路径规划仿真器(FAMU-FSU工程学院自主移动机器人项目)
  15. 图像之超简单方式实现微信头像功能
  16. traceroute 安装及使用
  17. Android开发学什么
  18. 05-用户和组以及权限
  19. Nmap扫描软件分析
  20. linux中标麒麟u盘制作,中标麒麟桌面操作系统龙芯版系统安装盘(U盘)制作方法

热门文章

  1. C语言二分查找算法[基础算法]
  2. 谷歌工程师阴谋干掉IE6的尘封往事
  3. iOS应用下集成携程api(酒店和飞机票)
  4. 学习js 正则表达式
  5. 专有网VPC---使用
  6. 7-2 输油管道问题
  7. UCLA计算机科学硕士项目,UC加州大学各分校哪些专业特别牛?
  8. webpack4 搭建 Vue 开发环境笔记
  9. ios提醒事项和日历同步优化
  10. 解决 笔记本 键盘进水 问题