Java TreeMap排序算法实例
本文实例讲述了JavaTreeMap排序算法。分享给大家供大家参考,具体如下:
TreeMap和HashMap用法大致相同,但实际需求中,我们需要把一些数据进行排序;
以前在项目中,从数据库查询出来的数据放在List中,顺序都还是对的,但放在HashMap中,顺序就完全乱了。
为了处理排序的问题:
1.对于一些简单的排序,如:数字,英文字母等
TreeMaphm=newTreeMap(newComparator(){ publicintcompare(Objecto1,Objecto2){ //如果有空值,直接返回0 if(o1==null||o2==null) return0; returnString.valueOf(o1).compareTo(String.valueOf(o2)); } });
备注:
compareTo(Stringstr):是String提供的一个方法,如果参数字符串等于此字符串,则返回0值;如果按字典顺序此字符串小于字符串参数,则返回一个小于0的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于0的值。
intcompare(To1,To2):随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数。
2.对于处理有中文排序的问题
TreeMaphm=newTreeMap(newComparator(){ publicintcompare(Objecto1,Objecto2){ //如果有空值,直接返回0 if(o1==null||o2==null) return0; CollationKeyck1=collator.getCollationKey(String.valueOf(o1)); CollationKeyck2=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; publicclassTestSort{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub CollatorComparatorcomparator=newCollatorComparator(); TreeMapmap=newTreeMap(comparator); for(inti=0;i<10;i++){ Strings=""+(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("碑海","碑海"); Collectioncol=map.values(); Iteratorit=col.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
比较器类:
packageChineseSort; importjava.text.CollationKey; importjava.text.Collator; importjava.util.Comparator; publicclassCollatorComparatorimplementsComparator{ Collatorcollator=Collator.getInstance(); publicintcompare(Objectelement1,Objectelement2){ CollationKeykey1=collator.getCollationKey(element1.toString()); CollationKeykey2=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算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。