A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘俊佳 中级黑马   /  2012-7-23 18:20  /  2537 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘俊佳 于 2012-7-23 19:52 编辑

定义了比较器MyCompare,将比较器对象作为参数传递给TreeSet集合的构造函数进行按姓名排序:
package collection;
import java.util.*;


class Student implements Comparable//该接口强制让学生具备比较性
{
private String name;
private int age;


Student(String name,int age)
{
  this.name=name;
  this.age=age;
}
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}
@Override
public int compareTo(Object obj)
{
  
       //return 1;
  
  if(!(obj instanceof Student))
   throw new RuntimeException("不是学生对象");
  Student s=(Student)obj;
  
  //System.out.println(this.name+"....compareto...."+s.name);
  if(this.age>s.age)
  return 1;
  if(this.age==s.age)
  {
   return this.name.compareTo(s.name);
  }
  return -1;
}

}


public class TreeSetDemo2 {
public static void main(String[] args)
{
        TreeSet ts=new TreeSet(new MyCompare());
  
  ts.add(new Student("lisi02",22));
  ts.add(new Student("lisi007",20));
  ts.add(new Student("lisi09",19));
  ts.add(new Student("lisi06",18));
  ts.add(new Student("lisi007",29));
//  /ts.add(new Student("lisi007",20));
  //ts.add(new Student("lisi01",40));
  
  Iterator it=ts.iterator();
  while(it.hasNext())
  {
   Student stu=(Student)it.next();
   System.out.println(stu.getName()+"..."+stu.getAge());
  }
  
}

}
class MyCompare implements Comparator
{
@Override
public int compare(Object o1, Object o2) {
  Student s1=(Student)o1;
  Student s2=(Student)o2;
  
  int num=s1.getName().compareTo(s2.getName());
  if(num==0)
  {
   return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
   /*if(s1.getAge()>s2.getAge()){
    return 1;
   if(s1.getAge()==s2.getAge())
    return 0;
   return -1;
  }
  return num;
  */
  
  }
  return num;
}
}
下面是打印结果:


我想如果里面是三个汉字的姓名,比如王晓明,那怎么按姓名排序?















UBZ2E426_OFM]8%[)LLQ7[X.jpg (17.35 KB, 下载次数: 67)

UBZ2E426_OFM]8%[)LLQ7[X.jpg

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

5 个回复

倒序浏览
党巾水 来自手机 中级黑马 2012-7-23 18:41:01
沙发
按汉字的ASCII码进行排序的话,那就和字母一样。
来自:黑马程序员训练营论坛 Android客户端来自: Android客户端

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
刘馨琪 发表于 2012-7-23 18:41
按汉字的ASCII码进行排序的话,那就和字母一样。
来自:黑马程序员训练营论坛 Android客户端 ...

????????
回复 使用道具 举报
刘俊佳 发表于 2012-7-23 19:15
????????


按汉字的ASCII码进行排序的话,那就和字母一样。”
他意思就是说按这样吧。
比如王晓明 和安利
王晓明 wang 肯定 在 an的后面。就和 字母的abcd一样排序

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
这个可以使用容器的比较方法。自然顺序就行了,也可以自己重写 Compare比较方法
回复 使用道具 举报
王舜民 发表于 2012-7-23 19:34

按汉字的ASCII码进行排序的话,那就和字母一样。”
他意思就是说按这样吧。

嗯  是这样,知道了,谢谢你们
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马