java中如何对汉字进行排序?
前言:上一篇文章我們講解了java中實現Comparator進行排序 和實現Comparable進行排序,我們分別舉例根據學號和姓名降序排序,原文在這里:java中如何對對象排序?? ,不過在文章的最后,我故意留了個問題:“若姓名是漢字,我們上篇文章的方法還可以進行排序嗎?”答案是不可以的,今天,我們就這個問題展開闡述!
漢字按照首字母的先后順序排序
首先我們在上篇文章的代碼基礎上,把集合的值(name)改成漢字的名稱(畢竟學生的姓名哪有叫什么a、b、c的),代碼如下:
//對集合進行排序public?static?void?testSortList(){List<Student> stus = new?ArrayList<Student>();stus.add(new?Student(1,"阿三"));stus.add(new?Student(4,"布丁"));stus.add(new?Student(5,"曹操"));stus.add(new?Student(2,"馮勝"));stus.add(new?Student(3,"張三"));System.out.println("排序之前:");for?(Student s : stus) {System.out.println(s.getSid()+"---"+s.getName());}//Collections.sort(stus);Collections.sort(stus,new?SortName());System.out.println("排序之后:\n");for?(Student s : stus) {System.out.println(s.getSid()+"---"+s.getName());}}按照我們預想的結果,升序的結果應該是:
阿三、布丁、曹操、馮勝、張三
下面我們來跑一下程序看看是不是:
居然不可以,看看問題出在哪里?用腳指頭都能想得出來,問題就出在了SortName類的compare方法上,該方法的compareTo只適用于字母字符排序(上篇文章的案例就是),compareTo方法的代碼:
@Overridepublic int compare(Student o,Student o1) {return?o.getName().compareTo(o1.getName());}那我們應該如何改呢?只需要新加個Collator.getInstance(java.util.Locale.CHINA);即可,全部代碼如下:
@Overridepublic?int?compare(Student o,Student o1)?{Comparator<Object> compare = Collator.getInstance(java.util.Locale.CHINA);return?compare.compare(o1.getName(),o.getName());}讓程序跑一跑看看:
那位又問:“老師,這是降序,升序怎么辦?”好辦,只需將compare里面的參數調換個位置即可,如下:
@Overridepublic?int?compare(Student o,Student o1)?{Comparator<Object> compare = Collator.getInstance(java.util.Locale.CHINA);return?compare.compare(o.getName(),o1.getName());}結果如下:
好了,今天的分享就到這里,我們明天再見!
往期精彩
凌云KTV點歌系統功能簡介
2020-10-17
注意!在subList生成子列表之后,一定不要隨便更改原列表
2020-10-15
神奇!一行代碼實現刪除某集合下標20-30的元素
2020-10-14
‘小會計’的轉行之旅
2020-10-13
子列表只是原列表的一個視圖
2020-10-12
“半路出家”的程序猿怎么不被“熊”
2020-10-11
某同學工作之后的感悟
2020-10-10
點分享
點點贊
點在看
總結
以上是生活随笔為你收集整理的java中如何对汉字进行排序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在总统选举期间识别假新闻-避免恐慌和冷漠
- 下一篇: 高启航:秋运会!