对不起  看错了,刚睡醒,,这个其实是Comparator和Comparable的区别,Comparator叫做比较器,Comparable是让类具有比较性,,你必须先得让这个类实现comparable接口,如果对Comparable的方法中实现的类的比较不满意的话,然后可以自定义比较器也就是说 实现Comparator接口,你这里定义的A应该可以看做是比较器,要是你这样写的话,A还要实现Comparable接口

解决方案 »

  1.   

    你如果要通过类实现接口的方式进行排序的话需要实现的是 Comparable接口并且重写public int compareTo(A a)方法,
    如果你用Comparator的话需要
    TreeSet<A> list = new TreeSet<A>(new Comparator<T>() {
    });
    给TreeSet重新指定一个Comparator,因为TreeSet默认就是排序的所以需要这样指定,ArrayList等无序的使用强制排序时可以使用Collections.sort(list,new Comparator<T>(){
    });
      

  2.   

    我这个程序是想按字符串排序。用comparable我不知道该怎么写。我把两个接口都接上?
    用comparable里面的compareTo方法,我只会数字比较,字符串该怎么在compareTo方法里写呀?
    import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    SortedSet<A> list = new TreeSet<A>();
    list.add(new A("abc",100));
    list.add(new A("efg", 88));
    list.add(new A("de", 89));
    System.out.println(list);

    }
    }class A implements Comparator<A>,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 String toString()
    {
    return "[name=" + name + ", number=" + number + "]";
    }

    public int compare(A a, A b)
    {
    if((a.name).compareTo(b.name)>0)
    {
    return 1;
    }
    else if((a.name).compareTo(b.name) ==0)
    {
    return 0;
    }
    else
    {
    return -1;
    }
    }

    public int compareTo(A other) //这个方法的主体该怎么写呀?
    {

    }
    private String name;
    private int number;
    }
      

  3.   

    我用Comparable接口写了一个程序,请你看看。这个写法我是看到网上有这个写法,我有一个疑问,在程序中可以看到。import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    SortedSet<A> list = new TreeSet<A>();
    list.add(new A("www",100));
    list.add(new A("efg", 88));
    list.add(new A("de", 89));
    System.out.println(list);

    }
    }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 String toString()
    {
    return "[name=" + name + ", number=" + number + "]";
    }

    public int compareTo(A other)
    {
    int i;
    i = name.compareTo(other.name); //此处的compareTo与方法名一样,是一回事吗?
    if(i > 0)
    {
    return 1;
    }
    else if(i == 0)
    {
    return 0;
    }
    else
    {
    return -1;
    }
    } private String name;
    private int number;
    }
      

  4.   

    我还想问,Comparator只能在类A外用吗?不能你comparable在A类里面用?需要在main方法中用吗?
      

  5.   

    又在网上看了一些答案,总算有些理解了。用Comparator 可以这样写:
    import java.util.*;public class Test_2
    {
    public static void main(String[] args)
    {
    SortedSet<A> list = new TreeSet<A>(new Acomparator());
            list.add(new A("abc",100));
            list.add(new A("efg", 88));
            list.add(new A("de", 89));    
            System.out.println(list);
    }

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

    public String getName()
    {
    return name;
    }

    public int getNumber()
    {
    return number;
    }

    public String toString()
    {
    return "[name=" + name + ", number=" + number + "]";
    }

    private String name;
    private int number;
    }
    class Acomparator implements Comparator<A>
    {
    public int compare(A one, A two)
    {
    int i;
    i = one.getName().compareTo(two.getName());
    if(i > 0)
    {
    return 1;
    }
    else if(i == 0)
    {
    return 0;
    }
    else
    {
    return -1;
    }
    }
    }