上回说到,由于对数据进行处理的时候是按照乱序一行一行的处理,导致并行线程各自占据了一部分数据,谁也不肯释放,从而发生死锁。

为什么会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。

JavaDoc里面没有详细地解释,所以用代码进行了一下尝试

import java.sql.Timestamp;

import java.util.HashMap;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class Test2 {

public static void main(String[] args) {

///TEST / System.out.println("## Hashtable ##");

Hashtable ht = new Hashtable();

ht.put("1", "OOO");

ht.put("3", "OOO");

ht.put("2", "OOO");

ht.put("5", "OOO");

ht.put("4", "OOO");

Iterator it = ht.keySet().iterator();

while (it.hasNext()) {

System.out.println(it.next());

}

///TEST / System.out.println("## TreeMap ##");

TreeMap tm = new TreeMap();

tm.put("1", "OOO");

tm.put("3", "OOO");

tm.put("2", "OOO");

tm.put("5", "OOO");

tm.put("4", "OOO");

Iterator it2 = tm.keySet().iterator();

while (it2.hasNext()) {

System.out.println(it2.next());

}

///TEST / System.out.println("## HashMap ##");

Map hm = new HashMap();

hm.put("1", "OOO");

hm.put("3", "OOO");

hm.put("2", "OOO");

hm.put("5", "OOO");

hm.put("4", "OOO");

Iterator it3 = hm.keySet().iterator();

while (it3.hasNext()) {

System.out.println(it3.next());

}

///TEST / System.out.println("## LinkedHashMap ##");

LinkedHashMap lhm = new LinkedHashMap();

lhm.put("1", "OOO");

lhm.put("3", "OOO");

lhm.put("2", "OOO");

lhm.put("5", "OOO");

lhm.put("4", "OOO");

Iterator it4 = lhm.keySet().iterator();

while (it4.hasNext()) {

System.out.println(it4.next());

}

}

}

输出结果如下

## Hashtable ##

5

4

3

2

1

## TreeMap ##

1

2

3

4

5

## HashMap ##

3

2

1

5

4

## LinkedHashMap ##

1

3

2

5

4

由此可见,大致上如下

Hashtable.keySet() 降序

TreeMap.keySet() 升序

HashMap.keySet() 乱序

LinkedHashMap.keySet() 原序

除了TreeMap.keySet(), JavaDoc中对keySet()返回值的顺序没有明确说明,

实际应用中,如果对顺序有明确要求,最好能明确的对其顺序进行整理。

java keyset 排序_JAVA中KEYSET()返回值的排序问题相关推荐

  1. java util 排序_Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  2. java comparable排序_JAVA中通过Comparable接口实现简单排序

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  3. java线程排序_Java中的并发排序

    我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个 ...

  4. java list 排序_Java中List的排序

    场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...

  5. java自动排序_java中的自动排序集合 ---- 20160809

    TreeSet的实现: TreeMap实现: 需要注意: 1. 当利用comparator比较两个元素相等时,插入的时候会失败.而hashset是发现两个元素相等(即:两个元素的hashcode相同, ...

  6. java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?

    String实现了Comparable,这就是Java中的自然顺序(使用类似的接口进行比较).您可以将字符串放在TreeSet中,也可以使用Collections或Arrays类进行排序. 但是,在您 ...

  7. java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...

    先上答案:HashTable (哈希表)不是顺序表. 分析如下: 要搞清楚这个问题需要明确两个问题: 1. 什么是顺序表 2. 哈希表的数据结构 先说什么是顺序表.WIKI的解释是:顺序表是在计算机内 ...

  8. java单词排序_java中实现将输入的单词按首字母排序

    问题: 对给出的一系列英文单词按首字母进行排序,并输出排序后的结果. 在String中这样一个方法compareToIgnoreCase()它是忽略大小写的比较两个单词在字典中的顺序.通过使用这个方法 ...

  9. java合并排序_Java中的合并排序算法

    合并排序算法是一种分而治之的算法.在分而治之的范式中,一个问题被分解成较小的问题,其中每个小问题仍然保留着大问题的所有属性--大小除外.为了解决原始问题,每个部分都是单独解决的,然后这些部分又合并在一 ...

最新文章

  1. 计算程序运行时间(.net1.1 于.net2.0的区别)在.net2.0中提供了Stopwatch类,简单例子...
  2. Linux的DNS配置2-主从服务器
  3. pyqt 不规则形状窗口显示
  4. C++:C++中public protected private关键字用法
  5. 解决VS.NET 里Atuomation 服务器不能创建对象
  6. 让网页附件为Word或Excel的文件,下载时直接弹出下载对话框,而不打开它
  7. Ghost module
  8. 致 Python 初学者
  9. 上海城建坐标与WGS84坐标转换工具
  10. c语言 error c4028,在Visual Studio2010中,“警告C4028:正式參數1與聲明不同”顯示。...
  11. 计算机英语while,while循环用法
  12. 74HC573并联输出
  13. emacs-打开和关闭
  14. 淘宝标题优化词根优化方法技巧 什么是淘宝标题词根
  15. Springboot期刊在线投稿系统74j50计算机毕业设计-课程设计-期末作业-毕设程序代做
  16. HDU 4417 Super Mario(离线线段树or树状数组)
  17. 健康档案管理系统-毕业设计-SSM框架-SpringBoot2.X-VUE-Antd-MyBatis-Shiro
  18. ORACLE恢复truncate的表-转载
  19. ps 抽出工具 抠出头发等细致部分
  20. 成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo

热门文章

  1. STM32的复位方式:硬件复位、软件复位(看门狗复位和系统复位)
  2. 中国式排名SUMPRODUCT函数解释
  3. CertUtil的一般渗透
  4. 【数据结构】Manacher算法
  5. LLMNR Poison技术详解
  6. 2023年第1期-芯云未来——“FPGA 菁英挑战赛”高校进行时赛题说明
  7. 华硕X299 SAGE 报错检查DEBUG速查 Q-Code
  8. 计算机视觉领域稍微容易中的期刊(二)
  9. 第05章 平面钢架结构的深入分析(铰链支撑、完全固定、滚动铰链支撑)
  10. 踩坑---django定时任务django-apscheduler