0

我有一堂课如下。

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

3 回答 3

4

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

之后,您可以使用Arrays 类的标准排序方法

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);
    }
}
于 2012-10-01T06:32:50.263 回答
1

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

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

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

您可以定义Comparator并使用它。

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

于 2012-10-01T06:35:26.393 回答
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"));
    }
}
于 2014-12-22T09:33:13.963 回答