2012-10-01 83 views
0

我有一个类如下。定义(或覆盖)Arrays.sort方法

public class MyClass{ 
    int x; 
    String str; 
    public MyClass(int x) 
    { 
    this.x=x; 
    } 
public static void main(String args[]) 
{ 
    MyClass[] myclass=new MyClass[10]; 
    Random rnd=new Random(); 
    for(int i=0;i<10;i++) 
    { 
     myclass[i]=new MyClass(rnd.nextInt()); 
    } 
} 
} 

现在,初始化每个数组对象后,我现在希望根据它们的x值对它进行排序。可以重写Arrays.sort方法来完成该操作,还是需要定义我自己的方法?

回答

4

就你而言,由于你的MyClass类显然具有自然顺序,最简单的方法是让它实现接口。可以使用the standard sort methods of the Arrays class

public class MyClass implements Comparable<MyClass> { 
    int x; 
     ... 
     @Override 
     public int compareTo(MyClass o) { 
      return o.x-x; 
     } 
    public static void main(String args[]) { 
      MyClass[] myarray=new MyClass[10]; 
      ... 
      Arrays.sort(myarray); 
    } 
} 
+0

我认为应该的compareTo返回(X-o.x),那是我读你所建议的可比文档之后感觉。无论如何,非常感谢您的帮助。 –

+0

它完全取决于x关于你的自然顺序的含义。如果你之前想要小x,那就对了。 –

1

Array.sort方法存在很多过载问题。其中之一是

public static void sort(Object[] a, int fromIndex, int toIndex, Comparator c) 

排序根据由指定比较器产生的顺序的指定对象数组的指定范围。要排序的范围从索引fromIndex(包含)扩展到索引toIndex(排它)。 (如果fromIndex == toIndex,则要排序的范围为空)。范围中的所有元素必须可以通过指定的比较器相互比较(即,c.compare(e1,e2)不得为任何元素e1抛出ClassCastException和范围内的e2)。

您可以定义Comparator并使用它。

而且,因为这是一个static方法,所以它不能被覆盖。

+0

+1 - YUP ...静态方法不能被覆盖。 –

0

您可以使用arrays.sort采取用户输入和排序相应

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

public class SortMyNumbers { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String strUserInput = ""; 
     String strOp = ""; 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       System.in)); 

     do { 
      System.out 
        .println("...Enter no.s or Type End to terminate the program..."); 
      try { 
       strUserInput = reader.readLine(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      if (!strUserInput.equalsIgnoreCase("end") 
        && strUserInput.contains(",")) { 
       System.out.println(" Entered No.s are ..." + strUserInput); 
       System.out.println("Enter no.s..."); 
       String strArr[] = strUserInput.split(","); 

       double iArr[] = new double[strArr.length]; 
       int i = 0; 
       // Arrays.sort(strArr); 
       for (String s : strArr) { 
        iArr[i] = Double.parseDouble(s); 
        i++; 
       } 
       Arrays.sort(iArr); 
       for (double j : iArr) { 
        strOp += String.valueOf(j) + ","; 
       } 
       System.out.println(" Sorted No are " + strOp); 
      } else { 
       // System.out.println("Invalid i/p terminating..."); 
      } 
      strOp = strOp.substring(0, strOp.length() - 1); 

     } while (!strUserInput.equalsIgnoreCase("end")); 
    } 
}