Java中的比较器如何实现中文排序

  介绍

这期内容当中小编将会给大家带来有关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中的比较器如何实现中文排序