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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘俊佳 中级黑马   /  2012-8-16 09:40  /  2360 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下是代码:
  1. public class GenericDemo7 {
  2. public static void main(String[] args)
  3. {

  4. TreeSet<Student3> ts=new TreeSet<Student3>(new Comp());
  5. ts.add(new Student3("abc03"));
  6. ts.add(new Student3("abc02"));
  7. ts.add(new Student3("abc06"));
  8. ts.add(new Student3("abc01"));

  9. Iterator<Student3> it=ts.iterator();
  10. while(it.hasNext())
  11. {
  12. System.out.println(it.next().getName());
  13. }

  14. }
复制代码
  1. class Comp implements Comparator<Student3>
  2. {
  3. public int compare(Student3 s1,Student3 s2)
  4. {
  5. return s1.getName().compareTo(s2.getName());

  6. }
  7. }
复制代码
  1. class Person3
  2. {
  3. private String name;
  4. Person3(String name)
  5. {
  6. this.name=name;
  7. }

  8. public String getName() {
  9. return name;
  10. }
  11. public String toString()
  12. {
  13. return "person:"+name;
  14. }


  15. }
复制代码
  1. class Student3 extends Person3
  2. {

  3. Student3(String name) {
  4. super(name);

  5. }

  6. }
复制代码
这里的Comp类里面怎么可以用compareTo方法?没实现Comparable接口啊。




6 个回复

倒序浏览
class Comp implements Comparator<Student3>
{
public int compare(Student3 s1,Student3 s2)
{
    return s1.getName().compareTo(s2.getName());//你的name是字符串类型吧,你查阅api的string,字符串是有compareTo方法的,这里调用的是字符串的compareTo方法

}
}
回复 使用道具 举报
return s1.getName().compareTo(s2.getName());
s1.getName()得到是一个字符串   而在String类中有compareTo这个方法
compareTo(String anotherString)   按字典顺序比较两个字符串。
compareTo(String anotherString) 返回类型为int类型
回复 使用道具 举报
s1.getName()返回的是一个字符串,由于String类已经实现了comparable接口,字符串自身就具有了比较性。
它调用的是按自然排序的compareTo()方法.
回复 使用道具 举报
楼主可以查查API,Comparable是一个接口,在它的已知实现类中是由String的。
s1.getName().compareTo(s2.getName()是两个String进行比较,当然可以用compareTo方法啦。
回复 使用道具 举报
s1.getName().compareTo(s2.getName()是调用的String类的compareTo()方法是自然排序的,其实String类已经实现了Comparable接口
回复 使用道具 举报
结合视频和楼上各位的解答问题已经解决,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马