我有一个课程如下。
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方法来执行此操作,或者我需要定义自己的方法?
答案 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"));
}
}