日期:2014-05-20  浏览次数:20749 次

这个程序的compareTo应该怎能样写才能得出正确结果?
下面的程序是练习SortedSet与TreeSet,但是我我没有得出正确的结果,得出是像是地址一样的结果,我想可能是我的compareTo函数没写好,我现把它空出来了,希望大家帮我填一下。或者是这个程序还缺其他的步骤?

import java.util.*;

public class Test
{
public static void main(String[] args)
{

  SortedSet<A> parts = new TreeSet<A>();
  parts.add(new A("rst", 789));
  parts.add(new A("efg", 456));
  parts.add(new A("abc", 123));
        
  System.out.println(parts);
  
  SortedSet<A> sortname = new TreeSet<A>
  (new 
    Comparator<A>()
    {
      public int compare(A a, A b)
      {
        String x = a.getName();
      String y = b.getName();
      
      return x.compareTo(y);
      }
      
    }
  );
  
  sortname.addAll(parts);
  System.out.println(sortname);
     
}
}

class A implements Comparable<A>
{
public A(String name, int number)
{
this.name = name;
this.number = number;
}

public String getName()
{
return name;
}

public int getNumber()
{
return number;
}

public int compareTo(A other)
{


}

private String name;
private int number;
}

------解决方案--------------------
你是要按照什么拍?
按数字
return x.number-y.number;
------解决方案--------------------
引用:
Quote: 引用:

你是要按照什么拍?
按数字
return x.number-y.number;


按字符串排。
就算是按数字排,我想问的是类A中的compareTo里应该怎么写,不是主函数里compare里。请进一步指点。


一样的
public int compareTo(A other)
        {
                 return this.name.compareTo(other.name); 
                 
        }
------解决方案--------------------
楼主在A类里重写一下toString()方法。
------解决方案--------------------
引用:
我把整理好的程序贴上来,但是我又有一个疑问:
我认为System.out.println(parts);与System.out.println(sortname);显示的顺序应该不一样才是,但是结果好像是一样的。

都是通过名字进行比较的,循序当然一样啦
------解决方案--------------------
TreeSet默认是按升序排列的,所以一样