2011-12-09 6 views
0

誰かがjavaの次の問題を助けてくれますか?私は以下のように定義された単純なクラスを持っている:javaの配列をクラスフィールドで並べ替える

public class Expr { 
    public long total_apparitions; 
    public String expression=new String(); 

    public Expr(long total,String expr){ 
    this.total_apparitions=total; 
    this.expression=expr; 
    } 

    public void increment(long aparitions){ 
    total_apparitions+=aparitions; 
    } 
} 

私はArrays.sort組み込み関数を使用して、total_apparitionsフィールドでExprオブジェクトの配列をソートしたいです。比較ファクタをArrays.sortにどのように指定すればよいですか?どうもありがとう。

答えて

5

は、このようなComparableを実装する、と述べました。このようにすることの利点は、このタイプのオブジェクトの配列をソートするためのさまざまな概念を持つことができることです(名前で後でソートしたい場合は、コンパレータの別の実装が必要です) 。例えば

Arrays.sort(exprArray, new ByApparationsComparator()); 
4

Exprjava.lang.Comparable

編集を実装してください - (他の人がすでにやった)の例を提供している必要があります。ジェネリックスを使用した完全なサンプルです。 Comparableを実装することの代替として

public class Expr implements Comparable { 
    ... 
    public int compareTo(Object o) { 
    if(this.total_apparitions > ((Expr) o).total_apparitions) 
     return 1; 
    else if(this.total_apparitions < ((Expr) o).total_apparitions) 
     return -1; 
    return 0; 
    } 
} 
3

を、あなたはArrays.sort()方法にComparatorインスタンスを渡すことができます。@Jason Brauchtとして

public class Expr implements Comparable<Expr> 
{ 

    public long total_apparitions; 
    public String expression = new String(); 

    public Expr(long total, String expr) 
    { 
     this.total_apparitions = total; 
     this.expression = expr; 

    } 

    public void increment(long aparitions) 
    { 
     total_apparitions += aparitions; 
    } 

    public int compareTo(Expr o) 
    { 
     if (total_apparitions > o.total_apparitions) 
     { 
      return 1; 
     } 
     else if (total_apparitions < o.total_apparitions) 
     { 
      return -1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
} 
+0

をしかし、これは彼の呼び出し元のコードが混雑しに見える:

public class ByApparationsComparator implements Comparator<Expr> { public int compare(Expr first, Expr second) { if (first.total_apparitions > second.total_apparitions) { return 1; } else if (first.total_apparitions < second.total_apparitions) { return -1; } else { return 0; } } } 

次に、あなたが言うことができます。 'Comparable'を実装することで、すべてが読みやすくなり、必要なときにいつでも簡単に呼び出すことができます。 – Jon

+0

後の段階で何か別のものを並べ替えるのが本当にかどうかによって異なります。自然な並べ替え順序が1つしかない場合は、「Comparable」を実装することが最善の方法です。 –