Java TreeMap排序算法实例
本文实例讲述了java treemap排序算法。分享给大家供大家参考,具体如下:
treemap 和 hashmap 用法大致相同,但实际需求中,我们需要把一些数据进行排序;
以前在项目中,从数据库查询出来的数据放在list中,顺序都还是对的,但放在hashmap中,顺序就完全乱了。
为了处理排序的问题:
1. 对于一些简单的排序,如:数字,英文字母等
treemap hm = new treemap<string, string>(new comparator() { public int compare(object o1, object o2) { //如果有空值,直接返回0 if (o1 == null || o2 == null) return 0; return string.valueof(o1).compareto(string.valueof(o2)); } });
备注:
compareto(string str)
:是string 提供的一个方法,如果参数字符串等于此字符串,则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。
int compare(t o1,t o2)
:随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数。
2. 对于处理有中文排序的问题
treemap hm = new treemap<string, string>(new comparator() { public int compare(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)); return ck1.compareto(ck2); } });
备注: collationkey:collationkey 表示遵守特定 collator 对象规则的 string。
比较两个collationkey 将返回它们所表示的 string 的相对顺序。使用 collationkey来比较 string 通常比使用 collator.compare 更快。因此,当必须多次比较 string 时(例如,对一个 string 列表进行排序),使用 collationkey 会更高效。
实例:
package chinesesort; import java.util.collection; import java.util.iterator; import java.util.sortedmap; import java.util.treemap; public class testsort { public static void main(string[] args) { // todo auto-generated method stub collatorcomparator comparator = new collatorcomparator(); treemap map = new treemap(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()); } } }
比较器类:
package chinesesort; import java.text.collationkey; import java.text.collator; import java.util.comparator; public class collatorcomparator implements comparator { collator collator = collator.getinstance(); public int compare(object element1, object element2) { collationkey key1 = collator.getcollationkey(element1.tostring()); collationkey key2 = collator.getcollationkey(element2.tostring()); return key1.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算法相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。