Java自定义比较器实现中文排序

时间:2021-05-20

compareTo 方法  

compareTo()是两个字符串对象比较大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0。compareTo()是两个字符串对象按ASCII比较大小(汉字是Unicode),返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0。

Comparator 比较器  

Java 内实现自定义比较器比较简单,实现Comparator接口的compare()这个方法来制定排序规则,按照Java规范应满足以下约定,否则会抛Comparison method violates its general contract 异常。规则如下:

同时应满足以下约定:

自反性 sgn(compare(x, y)) == -sgn(compare(y, x))

传递性 compare(x, y) > 0 compare(y, z)>0) =>得出 compare(x, z)>0

一致性 (compare(x, y)==0) == (x.equals(y)),这点规范中原文是“not strictly required”,不是必须的,但是实现者应该知道不一致的后果,所以尽量实现这一要求.

Comparator<String> comparator = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); }};

以下代码示例:

@Testpublic void testCompare() { List<String> list = new ArrayList<>(); list.add("java"); list.add("php"); list.add("c++"); System.out.println("排序前-->" + list); Comparator<String> comparator = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }; Collections.sort(list, comparator); System.out.println("排序后-->" + list); Collections.reverse(list); System.out.println("排序后逆序-->" + list);}

Comparator中文排序

中文汉字是Unicode编码,所以排序时不是我们习惯用的拼音字母。如果还是刚才的实现,代码如下:

@Testpublic void testCompareCN() { List<String> list = new ArrayList<>(); list.add("中国");// 中->20013 unicode编码的4E2D list.add("英国");// 英-->33521 unicode编码的82F1 list.add("美国");// 美->32654 unicode编码的7F8E // 汉字unicode编码表 http://parator()); treeset.add(new Book("动物世界",50)); treeset.add(new Book("时间简史",25)); treeset.add(new Book("探索发现",60)); treeset.add(new Book("恐龙时代",20)); System.out.println(treeset); }}

以上这篇Java自定义比较器实现中文排序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章