2015-06-20 78 views
0

我使用了一个Comparator类来定义StringBuffer的排序。我实现了Comparator类和Comparator方法比较。为什么我使用java TreeSet Compare方法获取此输出?

为什么我得到这样的输出?

代码:

import java.util.Comparator; 
import java.util.TreeSet; 

public class SortestSetDemo { 
    public static void main(String[] args) { 
     TreeSet t1 = new TreeSet(new MyComparator()); 
     t1.add(new StringBuffer("a")); 
     // t1.add("d"); 
     t1.add(new StringBuffer("q")); 
     t1.add(new StringBuffer("w")); 
     t1.add(new StringBuffer("r")); 

     System.out.println(t1); 
    } 
} 

class MyComparator implements Comparator { 
    public int compare(Object ob1, Object ob2) { 

     // String i1=(String)ob1; 
     String i1 = ob1.toString(); 
     // String i2=(String)ob2; 
     String i2 = ob2.toString(); //corrected error here instead of ob1.toString it is ob2.toString() 

     return -i1.compareTo(i2); 
    } 
} 

输出中显示: [A]而不是[A,Q,R,W]

回答

3

你在你的代码中的错字。 String i2 = ob1.toString();。 这应该是

String i2 = ob2.toString(); 

下面代码工作正常 -

import java.util.Comparator; 
import java.util.TreeSet; 

public class SortestSetDemo { 
    public static void main(String[] args) { 
     TreeSet t1 = new TreeSet(new MyComparator()); 
     t1.add(new StringBuffer("a")); 
     // t1.add("d"); 
     t1.add(new StringBuffer("q")); 
     t1.add(new StringBuffer("w")); 
     t1.add(new StringBuffer("r")); 

     System.out.println(t1); 
    } 

} 

class MyComparator implements Comparator { 
    public int compare(Object ob1, Object ob2) { 

     // String i1=(String)ob1; 
     String i1 = ob1.toString(); 
     // String i2=(String)ob2; 
     String i2 = ob2.toString(); 
     return -i1.compareTo(i2); 

    } 
} 

输出:

[W,R,Q,A]

相关问题