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的排序相关推荐

  1. java treemap_Java TreeMap size()方法与示例

    java treemap TreeMap类的size()方法 (TreeMap Class size() method) size() method is available in java.util ...

  2. java treemap_Java TreeMap putAll()方法与示例

    java treemap TreeMap类putAll()方法 (TreeMap Class putAll() method) putAll() method is available in java ...

  3. java treemap_Java TreeMap lastKey()方法与示例

    java treemap TreeMap类lastKey()方法 (TreeMap Class lastKey() method) lastKey() method is available in j ...

  4. java treemap_Java TreeMap keySet()方法与示例

    java treemap TreeMap类的keySet()方法 (TreeMap Class keySet() method) keySet() method is available in jav ...

  5. java treemap_Java TreeMap HigherKey()方法与示例

    java treemap TreeMap类HigherKey()方法 (TreeMap Class higherKey() method) higherKey() method is availabl ...

  6. java treemap_Java TreeMap lastEntry()方法与示例

    java treemap TreeMap类的lastEntry()方法 (TreeMap Class lastEntry() method) lastEntry() method is availab ...

  7. java treemap_Java TreeMap firstEntry()方法及示例

    java treemap TreeMap类的firstEntry()方法 (TreeMap Class firstEntry() method) firstEntry() method is avai ...

  8. java treemap_Java TreeMap pollFirstEntry()方法与示例

    java treemap TreeMap类pollFirstEntry()方法 (TreeMap Class pollFirstEntry() method) pollFirstEntry() met ...

  9. java treemap value排序_【TreeMap】对Map按key和value分别排序

    使用TreeMap可以对key 和Value进行排序 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. ** Tree ...

最新文章

  1. 神经网络为什么要归一化
  2. 快速入门SSM整合配置建立第一个SSM项目模板
  3. Ubuntu 16.04下面安装grub-customizer来切换ubuntu+win7双系统开机启动顺序
  4. 浅谈.Net异步编程的前世今生----EAP篇
  5. 计算机二级web题目(9.1)--综合选择题3
  6. oracle数据库建表视频,Oracle数据库的创建表全
  7. 轻雨物联网解决方案:农业物联网的市场前景分析
  8. 如何使用Docker Swarm管理更多容器
  9. POJ 1011 Sticks
  10. php如何开发网络电话,利用开源软件30分钟搭建自己的voip网络电话系统V1.1
  11. openCV之中值滤波均值滤波(及代码实现)
  12. 超微服务器怎么开虚拟化,amd服务器开启虚拟化(amd处理器开启虚拟化)
  13. Word VBA自动排版(4)- 通过For循环批量替换
  14. 2019冬季乙级考试
  15. 苹果邮箱格式_3个小工具,让PDF格式不仅能编辑还能转成word 、execl、 ppt
  16. 前端二维表转化树结构。支持无限套娃
  17. 瞳孔特征值提取,blink frequency,fixation frequency,saccad extent, pupil diameter等
  18. Repeated DNA Sequences
  19. 推荐几款软件界面模型设计工具
  20. 更省密令是什么?更省密令填什么

热门文章

  1. 23亿美元大市场,NFV做好了准备吗?
  2. 《强化学习》中的第14章:心理学
  3. 【MySQL运维】MySQL5.1升级到MySQ 5.5实战
  4. java collection 遍历_Java for循环对集合的遍历
  5. python导出exe文件不依赖环境_Python生成了不依赖dll的exe | 学步园
  6. 以太网抓包数据报头长度
  7. c语言学籍管理实验报告,c语言实验报告(学生学籍管理系统)
  8. ifix与mysql_将 iFIX 与 Proficy Historian 配合使用
  9. Arcgis Javascript那些事儿(十)--发布网络分析服务
  10. 技术要能够变现才有价值