黑马程序员技术交流社区
标题:
学生类,如果姓名是中文该如何排序?
[打印本页]
作者:
李亚飞
时间:
2012-12-18 12:02
标题:
学生类,如果姓名是中文该如何排序?
本帖最后由 李亚飞 于 2012-12-18 17:48 编辑
package collection;
import java.util.*;
public class
TreeSetDemo2 {
/**
* 有个学生类:包含姓名和年龄。根据年龄从小到大排序(如果年龄相等 则按姓名排序)。
* 若姓名是字母的时候可以按字母排序,
* 若姓名是中文的时候该如何排序?
*/
public static void main(String[] args) {
meth_1();
}
public static void meth_1()
{
//传入比较器对象 new MyComparator()
TreeSet<Students> ts = new TreeSet<Students>(new MyComparator());
ts.add(new Students("lisi",21));
ts.add(new Students("zhangsan",20));
ts.add(new Students("along",21));
ts.add(new Students("admin",21));
ts.add(new Students("maer",23));
/* 若是中文该如何排序?
ts.add(new Students("李四",21));
ts.add(new Students("张三",20));
ts.add(new Students("阿龙",21));
ts.add(new Students("管理员",21));
ts.add(new Students("马二",23));
*/
//迭代器
Iterator<Students> it = ts.iterator();
while(it.hasNext())
{
Students s = it.next();
System.out.println("姓名:"+s.getName()+"\t年龄"+s.getAge());
}
}
}
class Students
//学生类 :姓名 年龄
{
private String name ;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Students(String name,int age) {
this.name = name;
this.age = age;
}
}
//比较器
class MyComparator implements Comparator<Students>
{
public int compare(Students s1,Students s2)
{
//根据年龄排序
int num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
if(num==0)
//如果年龄相对 则按姓名排序
return num = s1.getName().compareTo(s2.getName()) ;
return num ;
}
}
作者:
依然AI
时间:
2012-12-18 12:19
汉字最早是GB2312编码,收录了六千多个汉字,是按拼音排序的,编码是连续的。 后来出现了GBK编码,对GB2312进行了扩展,到了两万多汉字,并且兼容GB2312,也就是说GB2312中的汉字编码是原封不动搬到GBK中的(在GBK编码中[B0-D7]区中)。
如果我们只关心这6000多个汉字的顺序,就可以用下面的方法实现汉字宽松排序。
package chinese.utility;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
public class PinyinSimpleComparator implements Comparator<String> {
public int compare(String o1, String o2) {
return Collator.getInstance(Locale.CHINESE).compare(o1, o2);
}
}
复制代码
参见这个连接的详细讲解
http://www.blogjava.net/jeff-lau/archive/2007/12/21/169257.html
作者:
王晨
时间:
2012-12-18 13:33
简体中文中我们使用比较多的字符集是
GB2312-80
,简称为
GB2312
,这个字符集包含了目前最常用的汉字共计
6736
个。其中的汉字分为两大类:
常用汉字和
次常用汉字。
常用汉字按照汉语拼音来排序,而次常用汉字按照笔画部首进行排序。
对于汉字排序的原理我懂一些,对于这个代码说实话具体的我解释不太清楚,但是确实可以实现,希望对你有帮助!
实现代码:
import java.util.*;
import java.text.*;
public class Test
{
String [] test = new String [] {"李四" ,"张三" ,"tom" ,"学生" };
java.util.Arrays .sort(test, new ChineseGB2312Comparator());
System .out.println("============" );
for (String key : test)
System .out.println(key);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2