这期内容当中小编将会给大家带来有关Java中的比较器如何实现中文排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强> compareTo方法强>
compareTo()是两个字符串对象比较大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0. compareTo()是两个字符串对象按ASCII比较大小(汉字是Unicode),返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数。相等则返回0。
<强>比较器比较器强>
Java内实现自定义比较器比较简单,实现比较器接口的比较()这个方法来制定排序规则,按照Java规范应满足以下约定,否则会抛比较法违反一般合同异常。规则如下:
<强>同时应满足以下约定:强>
自反性胡志明市(比较(x, y))==胡志明市(比较(y, x))
传递性比较(x, y)比;0比较(y, z)在0)=祝辞得出比较(x, z)在0
一致性(比较(x, y)==0)==(x.e quals (y)),这点规范中原文是“不严格要求”,不是必须的,但是实现者应该知道不一致的后果,所以尽量实现这一要求。
Comparator比较器=new Comparator () { @Override 公共int比较(琴弦s1, s2) { 返回s1.compareTo (s2); } };
以下代码示例:
@Test 公共空间testCompare () { List,列表=new ArrayList<的在(); list.add (“java"); list.add (“php"); list.add (“c++”); System.out.println(“排序前,在“+列表); Comparator 比较器=new Comparator () { @Override 公共int比较(琴弦s1, s2) { 返回s1.compareTo (s2); } }; 集合。排序(列表,比较器); System.out.println(“排序后,在“+列表); Collections.reverse(列表); System.out.println(“排序后逆序——祝辞;“+列表); }
<>强比较器中文排序强>
中文汉字是Unicode编码,所以排序时不是我们习惯用的拼音字母。如果还是刚才的实现,代码如下:
@Test 公共空间testCompareCN () { List,列表=new ArrayList<的在(); list.add(“中国“);//中→20013 unicode编码的4 e2d list.add(“英国“);//英——在33521 unicode编码的82 f1 list.add(“美国“);//美→32654 unicode编码的7 f8e//汉字unicode编码表http://www.chi2ko.com/tool/CJK.htm System.out.println(“排序前,在“+列表); Comparator 比较器=new Comparator () { @Override 公共int比较(琴弦s1, s2) { int b=s1.compareTo (s2); 返回b; } }; 集合。排序(列表,比较器); System.out.println(“排序后,在“+列表); Collections.reverse(列表); System.out.println(“排序后逆序——祝辞;“+列表);//输出字符编码对应的十进制//字符=& # 39;美& # 39;;//System.out.println ((int)); }
输出的这个结果不符合我们的排序习惯,因此应该用排序器指定的地区。中国,代码应如下:
@Test 公共空间testCollator () { List,列表=new ArrayList<的在(); list.add(“中国“); list.add(“英国“); list.add(“美国“); System.out.println(“排序前,在“+列表); 集合。排序(列表,新Comparator () { @Override 公共int比较(琴弦s1, s2) { 字符串o1=?“; 字符串o2=?“; 如果(s1 !=null) { o1=s1; } 如果(s2 !=null) { o2=s2; } 排序器实例=Collator.getInstance (Locale.CHINA); 返回instance.compare (o1、o2); } }); System.out.println(“排序后,在“+列表); Collections.reverse(列表); System.out.println(“排序后逆序——祝辞;“+列表); }
<>强值得注意的是>强,compareTo不能传入空,自定义比较器时要注意。
<强> Java使用比较器对TreeSet进行自定义排序强>
比较器是个很方便的工具
一般定义格式为
Java中的比较器如何实现中文排序