Java 中文排序方式的尝试
来源:互联网 发布:微擎积分商城源码 编辑:程序博客网 时间:2024/06/09 19:16
一、通过实现Comparable接口,这种方式表明,类自身是可比较的,有了比较才能进行排序。最好提供一种标志,如一个整形的属性,或者字符串类型。
代码说明
package sort;public class User implements Comparable<User> {private String name;private Integer order;@Overridepublic 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<User> list = new ArrayList<User>();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<Employee> {private String name;public static Collator collator = Collator.getInstance(Locale.CHINESE);public Employee(String name) {this.name = name;}@Overridepublic 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<Employee> 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<User> {public static Collator collator = Collator.getInstance(Locale.CHINESE);@Overridepublic 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<User> list = new ArrayList<User>();list.add(user1);list.add(user2);list.add(user3);Collections.sort(list, new ChinesePinyinStringComparator());foreach(list);}实例化一个Locale环境里中的Collator 对象,产生比较。这种方式大部分的中文能比较出结果,有点Bug的地方就是多音字会出现问题,如藏文,汉文,彝文,这三个词组会有问题(可自行测试)
三、总结
Comparable接口是实现类的默认排序算法,一个类稳定成熟后其compareto方法几乎不会变,而Comparator接口则是一个类的扩展排序工具。
0 0
- Java 中文排序方式的尝试
- java实现按中文首字母排序的方式
- JAVA的中文排序
- 含中文的List列表按中文拼音排序的实现方式 Java
- 最简单的对Java List列表按中文拼音排序的实现方式
- 中文排序方式
- ORACLE中文排序方式
- SQL 中文排序方式
- java常见的排序方式
- java中文排序或者包含中文对象的排序
- apache报中文“以一种访问权限不允许的方式做了一个访问套接字的尝试”
- JAVA中金额的中文大写方式
- Java 作业 金额的中文大写方式
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- Oracel中中文排序方式
- Orcle中文字符排序方式
- 拖曳事件
- 你会对老板说这十句傻话吗
- 写高质量的文章
- deep into python lambda statement.
- 谁谁谁,在干嘛
- Java 中文排序方式的尝试
- strut2处理多值请求参数
- QListWidget
- C#中 ref 和 out 参数的区别
- ASP.NET大文件上传详解 http://developer.51cto.com/art/200907/138346.htm
- 笔记72--照片墙应用(仅使用内存缓存)
- 博弈问题的初步学习
- hashMap、hashtable和treeMap的区别
- 变参宏