博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 中文排序方式的尝试
阅读量:4030 次
发布时间:2019-05-24

本文共 2761 字,大约阅读时间需要 9 分钟。

一、通过实现Comparable接口,这种方式表明,类自身是可比较的,有了比较才能进行排序。最好提供一种标志,如一个整形的属性,或者字符串类型。

代码说明

package sort;public class User implements Comparable
{ private String name; private Integer order; @Override public int compareTo(User o) { return this.getOrder().compareTo(o.getOrder()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } }
整形的自身比较标识符,通过Collections.sort方法排序即可。

测试方法

public static void test0() {		User user1 = new User();		user1.setName("汉文");		user1.setOrder(1);		User user2 = new User();		user2.setName("彝文");		user2.setOrder(2);		User user3 = new User();		user3.setName("藏文");		user3.setOrder(3);		List
list = new ArrayList
(); list.add(user3); list.add(user1); list.add(user2); Collections.sort(list); foreach(list); }
字符串类型的比较器和测试代码

package sort;import java.text.Collator;import java.util.Locale;public class Employee implements Comparable
{ private String name; public static Collator collator = Collator.getInstance(Locale.CHINESE); public Employee(String name) { this.name = name; } @Override public int compareTo(Employee o) { return collator.compare(this.getName(), o.getName()); } public String getName() { return name; } public void setName(String name) { this.name = name; }}
测试代码

public static void test3() {				Employee e = new Employee("谢谢");		Employee e2 = new Employee("不客气");				List
list = Arrays.asList(e,e2); Collections.sort(list); for (Employee o : list) { System.out.println(o.getName()); } }
通过实现Comparable接口可实现简单的比较排序

二、通过实现Comparator接口,实现更多的排序规则。Comparator接口是一个工具类接口,它的名字含义是比较器的意思,即表示,用作比较,它与原有类的逻辑没有关系,只是实现两个类的比较逻辑,从这方面来说,一个类有多个比较器,只要有业务需求就可以产生比较器,就可以产生多种排序算法。

代码实现

package sort;import java.text.Collator;import java.util.Comparator;import java.util.Locale;public class ChineseStringComparator implements Comparator
{ public static Collator collator = Collator.getInstance(Locale.CHINESE); @Override public int compare(User o1, User o2) { int i = collator.compare(o1.getName(), o2.getName()); System.out.println("Compare To: " + i); return i; }}
测试代码

public static void test2() {		User user1 = new User();		user1.setName("你");		User user2 = new User();		user2.setName("爱");		User user3 = new User();		user3.setName("他");		List
list = new ArrayList
(); list.add(user1); list.add(user2); list.add(user3); Collections.sort(list, new ChinesePinyinStringComparator()); foreach(list); }
实例化一个Locale环境里中的Collator 对象,产生比较。这种方式大部分的中文能比较出结果,有点Bug的地方就是多音字会出现问题,如藏文,汉文,彝文,这三个词组会有问题(可自行测试)

三、总结

Comparable接口是实现类的默认排序算法,一个类稳定成熟后其compareto方法几乎不会变,而Comparator接口则是一个类的扩展排序工具。

转载地址:http://gelbi.baihongyu.com/

你可能感兴趣的文章
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
在CentOS 7系统上搭建LNMP 环境
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>