探究Hashtable、TreeMap、HashMap、LinkedHashMap四个Map的keySet()顺序问题。

package com.jxp;import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.TreeMap;import org.junit.Before;
import org.junit.Test;public class MapTest {private Hashtable<String , String> hashTable;private TreeMap<String , String> treeMap;private HashMap<String , String> hashMap;private LinkedHashMap<String, String> linkedHashMap;@Beforepublic void init() {hashTable = new Hashtable<String , String>();treeMap = new TreeMap<String , String>();hashMap = new HashMap<String , String>();linkedHashMap = new LinkedHashMap<String , String>();for(int i = 0; i < 31; i++) {hashTable.put(String.valueOf(i), i + "" + i);treeMap.put(String.valueOf(i), i + "" + i);hashMap.put(String.valueOf(i), i + "" + i);linkedHashMap.put(String.valueOf(i), i + "" + i);}}@Testpublic void indexTest() {System.out.println("Hashtable: " + hashTable.keySet());System.out.println("TreeMap: " + treeMap.keySet());System.out.println("HashMap: " + hashMap.keySet());System.out.println("LinkedHashMap: " + linkedHashMap.keySet());}
}

运行indexTest方法,结果如下

Hashtable: [30, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 29, 8, 28, 7, 27, 6, 26, 5, 25, 4, 24, 3, 23, 2, 22, 1, 21, 0, 20]
TreeMap: [0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 4, 5, 6, 7, 8, 9]
HashMap: [22, 23, 24, 25, 26, 27, 28, 29, 30, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 21]
LinkedHashMap: [0, 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]

上述打印的时候,尽量从keySet()得到Iterator进行取值。可以看出LinkedHashMap.keySet()拿到的Set是按照顺序的,其余三个都是乱序。因此,当遇到对数据排序有严格要求的问题时,要用LinkedHashMap。

深层原因,后期自行查看源码。

keySet()顺序相关推荐

  1. kafka源码分析-consumer的分区策略

    kafka源码分析-consumer的分区策略 1.AbstractPartitionAssignor 2.RangeAssignor 3.RoundRobinAssignor 4.StickyAss ...

  2. java keyset entryset 顺序_「entryset」如何遍历Map,map的keySet()和EntrySet()区别 - seo实验室...

    entryset 如何遍历Map,map的keySet()和EntrySet()区别 遍历map public static void main(String[] args) { // TODO Au ...

  3. 实现Map并保持插入顺序的Java类?

    我正在寻找具有键-值关联但不使用哈希的Java类. 这是我目前正在做的事情: 将值添加到Hashtable . 获取Hashtable.entrySet()的迭代器. 遍历所有值和: 获取迭代器的Ma ...

  4. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

  5. 关于Map迭代循环,key和value的顺序问题

    使用Hashtable,keySet()返回的顺序为降序(key降顺序) ---->6, 5, 4, 3, 2, 1 使用TreeMap,keySet()返回的顺序为升序(key升顺序) --- ...

  6. spring @order控制对象的顺序

    一.@order控制 @component,@configutation内的@BEAN的加载和实例化顺序.主要是在 ConfigurationClassPostProcessor.processCon ...

  7. 读配置文件能够保持顺序的 Java Properties 类

    序 前几天,公司项目中有一个需求是读取配置文件的.并且最好可以保证载入到内存中的顺序可以和配置文件里的顺序一致,可是.假设使用 jdk 中提供的 Properties 类的话,读取配置文件后.载入到内 ...

  8. java hasset 顺序_java集合排序问题

    List: 元素是有序的,元素可以重复,因为该集合体系有索引(脚标) 常用的子类对象: 1----ArrayList 底层的数据结构是使用的数组结构特点:查询速度快,但是增删比较慢 2----Link ...

  9. JsonObject存入顺序和输出顺序不一样问题-豆果

    2019独角兽企业重金招聘Python工程师标准>>> ##JsonObject的输入顺序和输出顺序不一样问题 ###问题原因在于JsonObject的默认实现的是用HashMap, ...

最新文章

  1. java中wait方法使用实例_java中wait、notify和notifyAll的概念用法和例子?
  2. JavaScript实现省市联动
  3. JAVA实现https单向认证
  4. Ubuntu下使用中文语言
  5. Boost:bimap双图项目的测试程序
  6. android 图片长方形_android 相机只拍摄矩形区域图片
  7. Android项目集成Weex
  8. HDU 2546(01背包)
  9. DNS的A、CNAME、MX、NS、TXT、SPF记录
  10. Java 导入导出Excle表格 两种方式
  11. C语言程序设计基础之联合
  12. python脚本打包成linux命令_python怎么打包生成linux命令行可用软件?
  13. 用批处理命令加WinRAR实现自动备份文件数据
  14. Scrapy 爬虫框架入门案例详解
  15. linearlayout布局的属性 gravity layout_gravity layout_weight
  16. java实训文献_java实训论文参考文献写作指导
  17. win10激活bug 任务栏假死点击无反应解决方案
  18. TBS1287 1/4 扫 48 通道 LED 背光驱动芯片
  19. 点餐小程序原型模板-书亦烧仙草
  20. 线性代数(2)行列式6种运算性质

热门文章

  1. android 开发工具历程_Android app应用软件开发的艰辛历程
  2. # 技术-202111-《并发编程的艺术》阅读笔记
  3. ArcMap绘图,根据两个属性信息分别确定符号大小和颜色
  4. firefly rk3399
  5. NX二次开发-UFUN替换组件UF_ASSEM_use_alternate
  6. Python调用百度人脸识别API接口检测颜值
  7. 被Adobe官宣死亡后,延续Flash游戏的n种方法
  8. 【人员密度检测】基于形态学处理和GRNN网络的人员密度检测matlab仿真
  9. Dubbo源码解析-序列化的实现
  10. SSM酒店管理系统项目Day6