定义(或覆盖)Arrays.sort方法

时间:2012-10-01 06:31:11

标签: java sorting method-overriding

我有一个课程如下。

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方法来执行此操作,或者我需要定义自己的方法?

3 个答案:

答案 0 :(得分:4)

在您的情况下,由于您的MyClass类显然具有自然顺序,因此最简单的方法是让它实现Comparable接口。

之后,您可以使用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);
    }
}

答案 1 :(得分:1)

Array.sort方法存在许多重载。其中之一是

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

根据指定比较器引发的顺序对指定对象数组的指定范围进行排序。要排序的范围从索引fromIndex(包括)延伸到index toIndex,exclusive。 (如果fromIndex == toIndex,则要排序的范围为空。)范围内的所有元素必须通过指定的比较器相互比较(即,c.compare(e1,e2)不得为任何元素e1抛出ClassCastException。和e2在范围内。)

您可以定义Comparator并使用它。

并且,因为它是static方法,所以无法覆盖。

答案 2 :(得分: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"));
    }
}