对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画。

本文就讲述如何实现按拼音排序的比较器(Comparator)。


作者:Jeff 发表于:2007年12月21日 11:27 最后更新于: 2007年12月21日 12:38 
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
http://www.blogjava.net/jeff-lau/archive/2007/12/21/169257.html


排序概述

  在Java中,对一个数组或列表(在本文中统称为集合)中的元素排序,是一个很经常的事情。好在Sun公司在Java库中实现了大部分功能。如果集合中的元素实现了Comparable接口,调用以下的静态(static)方法,就可以直接对集合排序。

// 数组排序的接口
// 数组中的元素可以是像int这样的原生类型(primitive type), 也可以是像String这样实现了Comparable接口的类型,这里用type表示。

java.util.Arrays.sort(type[] a);

// 列表排序的接口

java.util.Collections.sort(List<T> list);

  以上的这些排序方式能满足大部分应用。但集合中的元素没有实现Comparable接口,或者集合中的元素要按一种特别的方式排序,这要怎么办?Sun公司早就想到了,并在Java库中提供上面两个方法的重载。

// 数组排序方法
// 数组中的元素可以是像int这样的原生类型(primitive type), 也可以是像String这样实现了Comparable接口的类型,这里用type表示。

public static <T> void sort(T[] a, Comparator<? super T> c)

// 列表排序方法

public static <T> void sort(List<T> list, Comparator<? super T> c)

  只要实现了Comparator接口,就可以按程序员自己的意思去排序了。对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画。汉字是通过一定的编码方式存储在计算机上的,主要的编码有:Unicdoe、GB2312和GBK等。

Unicode 编码中的汉字

  Unicode中编码表分为两块,一个是基本的,一个是辅助的。现在的大多数操作系统还不支持Unicode中辅助区域中的文字,如WinXp。

在Java中的字符就是Unicode码表示的。对于Unicode基本区域中的文字,用两个字节的内存存储,用一个char表示,而辅助区域中的文字用4个字节存储,因此辅助区域中的就要用两个char来表示了(表一种蓝色底就是辅助区域中的文字)。一个文字的unicode编码,在Java中统一用codePoint(代码点)这个概念。

中文和日文、韩文一样是表意文字,在Unicode中,中日韩三国(东亚地区)的文字是统一编码的。CJK代表的就是中日韩。在这里,我把这3中文字,都作为汉字处理了。(日语和韩语可能就是从汉语中衍生的吧!)

汉字在Unicode中的分布大致如下表:

  首字编码 尾字编码 个数
基本汉字 U4E00 U9FBF 20928
异性字 UF900 UFAFF 512
扩展A U3400 U4D8F 512
扩展B U20000 U2A6DF 42720
补充 U2F800 U2FA1F 544
其他     ...

表一

在这些编码区间,有些编码是保留的。

GB2312编码

  GB2312是中华人民共和国最早的计算机汉字编码方式。大概有6000多个汉字,这些汉字是按拼音顺序编码的。这6000多个汉字都是简体中文字。

GBK编码

  GB2312的扩展,并兼容GB2312。扩展后的汉字大概有2万多个,其中有简体汉字也有繁体汉字。

最新文章

  1. Cross-Entropy Loss 与Accuracy的数值关系
  2. nav元素
  3. 将事件绑定在html标签中和js动态绑定的区别
  4. BZOJ3356 : [Usaco2004 Jan]禁闭围栏
  5. 搞JAVA在北京月薪15K的朋友来到厦门却很难找到工作
  6. GC:垃圾回收器简介
  7. 如何让网页打开就运行JS代码,不用onclick
  8. hdu 4857 逃生 拓扑排序+PQ,剥层分析
  9. Linux Shell 文件描述符 及 stdin stdout stderr 重定向
  10. SpringMVC 无法访问到指定jsp页面可能的原因
  11. 【MySQL】MySQL基础操作语句
  12. SpringBoot热部署
  13. 【转】Zookeeper 安装和配置
  14. MVCAPi Httpclient
  15. git权限
  16. JAVA自学笔记12
  17. 绘图QPainter-字体
  18. 在PowerShell中使用Vim
  19. centos7上安装nagios及增加监控服务器
  20. android 自定义listview无法响应点击事件OnItemClickListener

热门文章

  1. GC日志补充
  2. ASP.NET 将DataTable解析成JSON简介
  3. 为什么Facebook要将视频从Flash全面迁移到HTML5?
  4. Mongodb学习使用记录
  5. CentOS平台下为Python添加MongoDB支持PyMongo
  6. phpcms常用接口调用方法
  7. 【Vmware】已有镜像文件的导入
  8. Android开发中Eclipse里的智能提示设置
  9. 【转】STL中mem_fun和mem_fun_ref的用法及区别
  10. OFBiz进阶之HelloWorld(五)创建新实体