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

あなたの場合、クラスには明らかに自然な順序があるため、最も簡単なのはComparableインターフェイスMyClassを実装させることです。

その後、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。それらの1つは

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メソッドなので、オーバーライドすることはできません。

于 2012-10-01T06:35:26.393 に答える