0

プライベート フィールドNumを持つクラス Entry と、エントリのリスト (Entry) を含むクラス MyList があります。Num の値に従って、エントリのリストを並べ替える必要があります。これを最善の方法で行うにはどうすればよいですか?使用する必要がありますCollections.sort()か?

public class MyList()
{
  private List<Entry> entries;

  public MyList()
  {
    ...
  }

}

public class Entry()
{
  private int Num;
  private String Val;

  public MyClass()
  {
    this.Num = 0;
    this.Val = "";
  } 

  public void setNum(int Num)
  {
    this.Num = Num;
  }

  public int getNum()
  {
   return this.Num();
  }

}
4

4 に答える 4

1

Comparatorインターフェイスを実装し、 compareメソッドをオーバーライドするクラスを作成する必要があります。次に、コレクションとコンパレータ クラスを入力としてCollections.sortメソッドを呼び出すことができます。

サンプルを使用するための簡単なチュートリアルを次に示します。

http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

于 2013-07-16T11:15:34.357 に答える
1
public class CustomComparator implements Comparator<YourObject> {
    @Override
    public int compare(YourObject o1, YourObject o2) {
        int cmp = Integer.compare(o1.getNum(), o2.getNum());
        return comp;
    }
}

比較も使えます。

int cmp = Integer.compare(a, b);// Java 7 では

int cmp = Double.compare(a, b); // Java 7 より前

于 2013-07-16T11:18:54.057 に答える
1

Comparableを使用します。このオブジェクトが他のオブジェクトと等しい場合は を返し、比較して大きい場合は正の値を返し、小さい場合は負の値を返すEntry実装を提供することにより、クラスにこのインターフェイスを実装させます。compareTo()0Entry

public class Entry implements Comparable<Entry> // Use Generics
{
  private int Num;
  private String Val;

  public MyClass()
  {
    this.Num = 0;
    this.Val = "";
  }

  // getters/seters()

  public int compareTo(Entry otherEntry)
  {
   int num2 = otherEntry.getNum();
   return num == num2 ? 0 :
          (num > num2 ? 1 : -1);
  }

}

次に、オブジェクトCollections.sort()のコレクションで使用しEntryます。

List<Entry> lisOfEntries = new ArrayList<Entry>();
// populate the list; then sort using
Collections.sort(listOfEntries);

異なる基準を使用して複数の並べ替え順序をサポートするには、代わりにComparator#compare()を使用します。

于 2013-07-16T11:26:04.963 に答える