0

Zirakの助けに感謝します。以前の投稿では、JavaScript で次のように実装しました。

var arr1 =[0,1,2,3];
var arr2 =["ac", "bc", "ad", "e"];
var result = arr1 .sort(function(i, j){return arr2[i].localeCompare(arr2[j])})
document.write(result );

これを実現する方法は、JavaScript では非常にコンパクトですが、これを Java で実装することも、このような単純さで実現できますか? 次のような Comparable インターフェースの実装しか考えられませんでした。

public class testCompare {
    public static String[] arr2={"ac", "bc", "ad", "e"};
    public static Obj[] arr1={new Obj(0), new Obj(1), new Obj(2), new Obj(3)};
    static class Obj implements Comparable{
            int index=0;
            public Obj(int i){
                    index=i;
            }
            @Override
            public int compareTo(Object o) {
                    return arr2[index].compareTo(arr2[((Obj)o).index]);
            }
     }
}

しかし、配列に X 個の項目がある場合、X 個の Objs を作成する必要があります。これをより簡単に達成できる別の方法はありますか? 別の質問は、上記の方法を実行した場合、Java と JavaScript の両方でソートの時間の複雑さはどれくらいになるかということO(n^2)です。どうもありがとう

4

4 に答える 4

4
public class MyComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer i1, Integer i2) {
        return arr2[i1.intValue()].compareTo(arr2[i2.intValue()]);
    }
}

Arrays.sort(arr1, new MyComparator());

これは JavaScript のソートに相当します。JavaScript でコールバック関数を使用する場合は Comparator オブジェクトを使用します。

于 2011-05-05T13:49:25.120 に答える
3

TreeMap<String, Integer>すべてのエントリが文字列キーでソートされることを意味する (整数をソートする場合) を使用してみてください。

SortedMap<String, Integer> map = new TreeMap<String, Integer>();
map.put("ac", 0);
map.put("bc", 1);
map.put("ad", 2);
map.put("e", 3);

for( Map.Entry<String, Integer> entry : map.entrySet() )
{
  System.out.println(entry.getKey() + " - " + entry.getValue());
}

出力:

ac - 0
ad - 2
bc - 1
e - 3

配列をソートして以前のインデックスの新しい順序を取得するには、配列を反復処理し、インデックスを Integer オブジェクトとしてマップに追加します。

String[] input = {"ab", "bc", "ad" , "e" };
SortedMap<String, Integer> map = new TreeMap<String, Integer>();
for( int i = 0; i < input.length; ++i )
{
  map.put(input[i], i); //or use values from another array, e.g. map.put(inputKeys[i], inputValues[i]);
}

キーを自然順序以外でソートする必要がある場合はComparator<String>TreeMapコンストラクターに a を追加できます。

于 2011-05-05T13:53:10.503 に答える
0

あなたの質問の2番目の部分に答えて:Arrays.sortJavaでは、APIで指定されているように、 O(n log n)の時間計算量が保証されています。

于 2011-05-05T13:52:49.747 に答える