2012-02-24 4 views
2

私はnameと呼ばれるStringフィールドを持つクラスを持っています。私はタイプSomeClass[]の配列を持っていて、これらのSomeClassオブジェクトを文字列順に反復したい。Java - SomeClassオブジェクトの配列をそれらのオブジェクトのStringフィールドで最も効率的にソートするにはどうすればよいですか?

これを行う最も効率的な方法は何かについて私は興味があります。私はある種のコンパレータを使うべきですか?それをすべてTreeMapに入れて、それを似たように繰り返すのは良い考えですか?私は解決策を考え出すことができると確信していますが、私はそれが効率的ではないと確信しています。

何か助けていただければ幸いです。

+0

、あなたは自分の名前のフィールドに応じてクラスオブジェクトをソートしたいです。それは...ですか ? – Ved

+0

@ programmer_1:はい、正確です。 – Tim

答えて

3

クラスをArraylistに入れ、そのsortメソッドを使用してください。 未確認コード:私の意見では

yourArray.sort(new YourNameComparator()); 

class YourNameComparator implements Comparator<YourNameClass> { 
    int compare(YourNameClass y1, YourNameClass y2) { 
     return y1.getName().compareTo(y2.getName()); 
    } 
} 
+0

これは、私がSomeClassクラスを変更することができず、それをサブクラス化したくないので、私が探していたものです。私はこれをやってしまったが、sort()呼び出しの匿名のComparatorクラスを使っていた。ありがとう。 – Tim

1

は、あなたの最善の策は、あなたが言うように、TreeMapの(またはあなたのためにそれをソートし、いくつかのデータ構造)、その後、すでにソートそれを読んで、それを置くことであろう。高速化する方法はほとんどありません。この方法では、最もクリーンで読みやすいコードが生成されます。

4

あなたはArrays.sort(a)のようなちょうどArrays.sortあなたComparableクラス、(コードを参照してください)

それとも、あなたが使用したい場合はコレクションフレームワーク

Arrays.asList(...)Collections.sort(..)がキーであることができます。工assがこの

public class SomeClass implements Comparable<SomeClass>{ 

    public String val; 

    @Override 
    public int compareTo(SomeClass that) { 
     return this.val.compareTo(that.val); 
    } 

    @Override 
    public String toString() { 
     return this.val; 
    } 
} 

のようなものであるのIF


yoがこの

SomeClass o = new SomeClass(); 
    o.val = "z"; 
    SomeClass t = new SomeClass(); 
    t.val = "a"; 
    SomeClass th = new SomeClass(); 
    th.val = "m"; 
    SomeClass[] a = new SomeClass[]{o, t, th}; 

    //this 
    Arrays.sort(a); 

    //or this 
    List<SomeClass> l = Arrays.asList(a); 
    System.out.println(l); 
    Collections.sort(l); 
    System.out.println(l); 
+0

'that.val'の代わりに' that.getVal() 'を使うべきではないでしょうか? – Ved

+0

@ programmer_1私は、属性をpublicにしました。 :)例えば、目的を果たす。 – Nishant

1

あなたの二つの選択肢のように並べ替えることができます:あなたのクラスがComparableを実装しており、compareToメソッドを書いたり、コンパレータを作成し、 Collections.sort(Listリスト、コンパレータc)に入力してください

StringY.compareTo(String x)が既に存在するので、あなたはおそらくcomparableを使いたいでしょう。私の理解あたりとして

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html

関連する問題