HashMap无序?TreeMap有序?
今天学习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有序?相关推荐
- 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别
转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...
- HashMap、TreeMap、Hashable和LinkedHashMap
Map是最重要的数据结构之一.开始会告诉怎么用HashMap.TreeMap.Hashtable和LinkedHashMap 1.Map概述 在Java SE中有4种Map的实现:HashMap.Tr ...
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别
2019独角兽企业重金招聘Python工程师标准>>> 1.HashMap.TreeMap都继承AbstractMap抽象类:TreeMap实现SortedMap接口,所以TreeM ...
- Map集合HashMap,TreeMap
Map集合没有继承Collection接口,其提供的是key到value的映射.Map集合中不能包含相同的key.每个key只能映射一个value.key还决定存储对象在映射中的存储位置,但不是有ke ...
- 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 ...
- Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap
一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...
- 面试:如何决定使用 HashMap 还是 TreeMap?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 问:如何决定使用 HashMap 还是 TreeMap? 介绍 T ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- 【面试题】使用 HashMap 还是 TreeMap
基本介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的:TreeMap的实现是基于红黑树结 ...
最新文章
- 文科学业水平测试题软件,学业水平测试:文科备战理科篇
- red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本
- [js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件?
- java 父类 new 子类
- Nexus1000v部署
- 济南python工资一般多少-Python火到天际,可是为啥找工作这么难?
- 一次和公司总监的聊天...
- 微信小游戏开发指南(二)微信小游戏常见问题解答
- 我们是如何优化英雄联盟的代码的
- CEOI2017 D1T3 mousetrap 树形dp+二分答案
- 源码:winamp播放器 C++
- 电影《阿凡达》观后感
- windows合成pfx
- 【源码】自主机器人路径规划仿真器(FAMU-FSU工程学院自主移动机器人项目)
- 图像之超简单方式实现微信头像功能
- traceroute 安装及使用
- Android开发学什么
- 05-用户和组以及权限
- Nmap扫描软件分析
- linux中标麒麟u盘制作,中标麒麟桌面操作系统龙芯版系统安装盘(U盘)制作方法