java treemap_Java TreeMap的排序
TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序;
以前在项目中,从数据库查询出来的数据放在List中,顺序都还是对的,但放在HashMap中,顺序就完全乱了。
为了处理排序的问题:
1. 对于一些简单的排序,如:数字,英文字母等
TreeMap hm = new TreeMap(newComparator() {public intcompare(Object o1, Object o2) {//如果有空值,直接返回0
if (o1 == null || o2 == null)return 0;returnString.valueOf(o1).compareTo(String.valueOf(o2));
}
});
备注:
compareTo(String str) :是String 提供的一个方法,如果参数字符串等于此字符串,
则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;
如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。
int compare(T o1,T o2):随第一个参数小于、等于或大于第二个参数而分别返回负整数、
零或正整数。
2.对于处理有中文排序的问题
TreeMap hm = new TreeMap(newComparator() {public intcompare(Object o1, Object o2) {//如果有空值,直接返回0
if (o1 == null || o2 == null)return 0;
CollationKey ck1=collator.getCollationKey(String.valueOf(o1));
CollationKey ck2=collator.getCollationKey(String.valueOf(o2));returnck1.compareTo(ck2);
}
});
备注: CollationKey:CollationKey 表示遵守特定 Collator 对象规则的 String。
比较两个CollationKey 将返回它们所表示的 String 的相对顺序。使用 CollationKey
来比较 String 通常比使用 Collator.compare 更快。因此,当必须多次比较 String 时
(例如,对一个 String 列表进行排序),使用 CollationKey 会更高效。
实例:
packageChineseSort;importjava.util.Collection;importjava.util.Iterator;importjava.util.SortedMap;importjava.util.TreeMap;public classTestSort {public static voidmain(String[] args) {//TODO Auto-generated method stub
CollatorComparator comparator = newCollatorComparator();
TreeMap map= newTreeMap(comparator);for(int i=0; i<10; i++) {
String s= ""+(int)(Math.random()*1000);
map.put(s,s);
}
map.put("abcd","abcd");
map.put("Abc", "Abc");
map.put("bbb","bbb");
map.put("BBBB", "BBBB");
map.put("北京","北京");
map.put("中国","中国");
map.put("上海", "上海");
map.put("厦门", "厦门");
map.put("香港", "香港");
map.put("碑海", "碑海");
Collection col=map.values();
Iterator it=col.iterator();while(it.hasNext()) {
System.out.println(it.next());}}}
比较器类:packageChineseSort;importjava.text.CollationKey;importjava.text.Collator;importjava.util.Comparator;public class CollatorComparator implementsComparator {
Collator collator=Collator.getInstance();public intcompare(Object element1, Object element2) {
CollationKey key1=collator.getCollationKey(element1.toString());
CollationKey key2=collator.getCollationKey(element2.toString());returnkey1.compareTo(key2);
}
}
运行该类,运行结果如下:
325
62
653
72
730
757
874
895
909
921
Abc
abcd
bbb
BBBB
碑海
北京
上海
厦门
香港
中国
此时可以看到中文的排序已经完成正常。如果想不让英文区分大小写,则修改CollatorComparator类,找到
element1.toString()
修改为:
element1.toString().toLowerCase()
当然你改成转换成大写的也无所谓了,当然element2.toString()也要同时修改为element2.toString().toLowerCase()。
java treemap_Java TreeMap的排序相关推荐
- java treemap_Java TreeMap size()方法与示例
java treemap TreeMap类的size()方法 (TreeMap Class size() method) size() method is available in java.util ...
- java treemap_Java TreeMap putAll()方法与示例
java treemap TreeMap类putAll()方法 (TreeMap Class putAll() method) putAll() method is available in java ...
- java treemap_Java TreeMap lastKey()方法与示例
java treemap TreeMap类lastKey()方法 (TreeMap Class lastKey() method) lastKey() method is available in j ...
- java treemap_Java TreeMap keySet()方法与示例
java treemap TreeMap类的keySet()方法 (TreeMap Class keySet() method) keySet() method is available in jav ...
- java treemap_Java TreeMap HigherKey()方法与示例
java treemap TreeMap类HigherKey()方法 (TreeMap Class higherKey() method) higherKey() method is availabl ...
- java treemap_Java TreeMap lastEntry()方法与示例
java treemap TreeMap类的lastEntry()方法 (TreeMap Class lastEntry() method) lastEntry() method is availab ...
- java treemap_Java TreeMap firstEntry()方法及示例
java treemap TreeMap类的firstEntry()方法 (TreeMap Class firstEntry() method) firstEntry() method is avai ...
- java treemap_Java TreeMap pollFirstEntry()方法与示例
java treemap TreeMap类pollFirstEntry()方法 (TreeMap Class pollFirstEntry() method) pollFirstEntry() met ...
- java treemap value排序_【TreeMap】对Map按key和value分别排序
使用TreeMap可以对key 和Value进行排序 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. ** Tree ...
最新文章
- 神经网络为什么要归一化
- 快速入门SSM整合配置建立第一个SSM项目模板
- Ubuntu 16.04下面安装grub-customizer来切换ubuntu+win7双系统开机启动顺序
- 浅谈.Net异步编程的前世今生----EAP篇
- 计算机二级web题目(9.1)--综合选择题3
- oracle数据库建表视频,Oracle数据库的创建表全
- 轻雨物联网解决方案:农业物联网的市场前景分析
- 如何使用Docker Swarm管理更多容器
- POJ 1011 Sticks
- php如何开发网络电话,利用开源软件30分钟搭建自己的voip网络电话系统V1.1
- openCV之中值滤波均值滤波(及代码实现)
- 超微服务器怎么开虚拟化,amd服务器开启虚拟化(amd处理器开启虚拟化)
- Word VBA自动排版(4)- 通过For循环批量替换
- 2019冬季乙级考试
- 苹果邮箱格式_3个小工具,让PDF格式不仅能编辑还能转成word 、execl、 ppt
- 前端二维表转化树结构。支持无限套娃
- 瞳孔特征值提取,blink frequency,fixation frequency,saccad extent, pupil diameter等
- Repeated DNA Sequences
- 推荐几款软件界面模型设计工具
- 更省密令是什么?更省密令填什么
热门文章
- 23亿美元大市场,NFV做好了准备吗?
- 《强化学习》中的第14章:心理学
- 【MySQL运维】MySQL5.1升级到MySQ 5.5实战
- java collection 遍历_Java for循环对集合的遍历
- python导出exe文件不依赖环境_Python生成了不依赖dll的exe | 学步园
- 以太网抓包数据报头长度
- c语言学籍管理实验报告,c语言实验报告(学生学籍管理系统)
- ifix与mysql_将 iFIX 与 Proficy Historian 配合使用
- Arcgis Javascript那些事儿(十)--发布网络分析服务
- 技术要能够变现才有价值