2012-10-01 80 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")); 
    } 
}