2

私は2つの配列を持っています

String a[]={"11","02","43","24","05","86","37","28","29","10"};
String b[]={"a","c","f","q","w","x","z","x","s","r"};

配列a[]を昇順にソートしたい

そして結果は好きかもしれません

String a[]={"02","05","10","11","24","28","29","37","43","86"};
String b[]={"c","w","r","a","q","x","s","z","f","x"};

javaを使用して上記のような結果を得るにはどうすればよいですか? Javaで利用可能なソート方法はありますか?

4

4 に答える 4

6

最も簡単な方法は、2 つのデータを別々の配列にするのではなく、何らかの方法でリンクすることです。多くの人が、うまく機能するマップを提案しています。何をしようとしているのかによっては、Comparable を実装する 2 つの変数を持つ新しいクラスも検討します。Comparable は、使用する別の Comparator が Collections.sort に指定されていない場合、コレクション (この場合は配列) 内にあるクラスの自然な順序を定義します。次のようになります。

    public class Data implements Comparable{ 
    private String stringOne;
    private String stringTwo;

    @Override
    public int compareTo(Object obj) {
        stringOne.compareTo((String)obj);
    }

他の場所で次のように呼び出します。

    Collections.sort(locationOfDataCollection);

次に、データのコレクションを 1 つ作成し、ゲッター メソッドを使用して他の文字列にアクセスできます。この実装により、将来、場合によっては自然順序を新しい Comparator でオーバーライドする必要がある場合 (たとえば、stringTwo による並べ替え) も簡単になります (戦略設計を参照)。

于 2012-11-29T15:39:55.323 に答える
4

関連する2つのデータ セットがあるため、これらをPair<String,String>型オブジェクトを介してリンクしてから にリンクするかList<Pair>、または に配置しますMap<String,String>

おそらく、最初の解決策はより直感的です。

public class Pair implements Comparable<Pair> {
   public String first;
   public String second;

   // equals/hashcode etc.
}

それらが標準 Java コレクションに入ると、これらをソートするための多数のソリューションが存在します。たとえば、上記では、コレクションの並べ替えメカニズムが使用するインターフェイスをPair実装しました。Comparable<T>

于 2012-11-29T14:50:34.890 に答える
0

注意が必要な問題の 1 つは、文字列は整数と同じ規則に従って並べ替えられないことです。並べ替えに使用する配列を文字列のままにしておくと、得られる結果に驚かれることでしょう。

于 2012-11-29T15:16:19.320 に答える
0

Java でこれを直接行う方法はありません。2 つのオプションがあります。

1) a を定義しMap<String, String>、その中にすべてのペアを入れます (("11", "a") のように)。最初の配列 (またはマップのキー) を並べ替え、その順序でマップの要素を取得します。

2) 各パーを保持するオブジェクトを作成し、Listそれを使用して を作成し、番号のみで比較してソートします ( を実装Comparableまたは作成しますComparator)。

于 2012-11-29T14:50:19.977 に答える