java keyset 排序_JAVA中KEYSET()返回值的排序问题
上回说到,由于对数据进行处理的时候是按照乱序一行一行的处理,导致并行线程各自占据了一部分数据,谁也不肯释放,从而发生死锁。
为什么会乱序,是因为取得数据行主键的时候,使用了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()返回值的排序问题相关推荐
- java util 排序_Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...
- java comparable排序_JAVA中通过Comparable接口实现简单排序
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...
- java线程排序_Java中的并发排序
我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个 ...
- java list 排序_Java中List的排序
场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...
- java自动排序_java中的自动排序集合 ---- 20160809
TreeSet的实现: TreeMap实现: 需要注意: 1. 当利用comparator比较两个元素相等时,插入的时候会失败.而hashset是发现两个元素相等(即:两个元素的hashcode相同, ...
- java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?
String实现了Comparable,这就是Java中的自然顺序(使用类似的接口进行比较).您可以将字符串放在TreeSet中,也可以使用Collections或Arrays类进行排序. 但是,在您 ...
- java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
先上答案:HashTable (哈希表)不是顺序表. 分析如下: 要搞清楚这个问题需要明确两个问题: 1. 什么是顺序表 2. 哈希表的数据结构 先说什么是顺序表.WIKI的解释是:顺序表是在计算机内 ...
- java单词排序_java中实现将输入的单词按首字母排序
问题: 对给出的一系列英文单词按首字母进行排序,并输出排序后的结果. 在String中这样一个方法compareToIgnoreCase()它是忽略大小写的比较两个单词在字典中的顺序.通过使用这个方法 ...
- java合并排序_Java中的合并排序算法
合并排序算法是一种分而治之的算法.在分而治之的范式中,一个问题被分解成较小的问题,其中每个小问题仍然保留着大问题的所有属性--大小除外.为了解决原始问题,每个部分都是单独解决的,然后这些部分又合并在一 ...
最新文章
- 计算程序运行时间(.net1.1 于.net2.0的区别)在.net2.0中提供了Stopwatch类,简单例子...
- Linux的DNS配置2-主从服务器
- pyqt 不规则形状窗口显示
- C++:C++中public protected private关键字用法
- 解决VS.NET 里Atuomation 服务器不能创建对象
- 让网页附件为Word或Excel的文件,下载时直接弹出下载对话框,而不打开它
- Ghost module
- 致 Python 初学者
- 上海城建坐标与WGS84坐标转换工具
- c语言 error c4028,在Visual Studio2010中,“警告C4028:正式參數1與聲明不同”顯示。...
- 计算机英语while,while循环用法
- 74HC573并联输出
- emacs-打开和关闭
- 淘宝标题优化词根优化方法技巧 什么是淘宝标题词根
- Springboot期刊在线投稿系统74j50计算机毕业设计-课程设计-期末作业-毕设程序代做
- HDU 4417 Super Mario(离线线段树or树状数组)
- 健康档案管理系统-毕业设计-SSM框架-SpringBoot2.X-VUE-Antd-MyBatis-Shiro
- ORACLE恢复truncate的表-转载
- ps 抽出工具 抠出头发等细致部分
- 成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo