たとえば ("a32ghS:SAD") などの多くの文字列があり、それらを並べ替える必要があります。次のような整数値を取得しても問題ありませんか。
String s = "a32ghS:SAD";
int l = 0;
for (int i = 0; i < s.length(); i++) {
l += (int) s.charAt(i);
}
整数 l に基づいて文字列を並べ替えてもよろしいですか? または、文字列に基づいて並べ替える必要がありますか?
各文字の文字値を単純に合計すると、正しく並べ替えられません (アルファベット順にすると仮定します)。string を考えてみましょう。これはコード サンプルの"aZZZZ"
後に続きます。"b"
メソッドは、strings に含まれる文字の文字コードの合計で文字列を並べ替えますが、特に役に立ちません。
アルファベット順に並べ替える場合は、Java ライブラリ メソッドCollections.sortを使用して並べ替えを行う必要があります。これを行うコードは既に記述されているためです。
ArrayList<String> list = new ArrayList<String>();
unsortList.add("cc");
unsortList.add("bb");
unsortList.add("dd");
unsortList.add("aa");
Collections.sort(list);
典型的なアルファベット順のソートは、ASCII 文字コードを最初の位置で比較し、そのように並べ替えることによって行われます。文字が同じ場合は、次の文字が考慮されます。
特定の方法で並べ替えるか、知っている文字列に関する知識を活用できない限り、この種のパフォーマンスを超えることはできません。
それは同じ整数表現を作り"a32ghS:SAD"
、それを持っています。"S32gha:SAD"
さらに、整数を文字列に変換する際に問題が発生します (何らかのマップ構造を使用する必要があります)。
したがって、答えは文字列を並べ替えるだけです。操作が本当に遅いというわけではありません(もちろん、アイテムの数によって異なります)。
いいえ、文字列内の位置が重要であるため (上記の回答を参照)、文字列の最大長がわかっている場合、および文字を追加した後にビット単位のシフトを行う場合は、問題ない可能性があります。
String.compareTo は各文字の Unicode 値をほとんど同じ方法で使用していますが、compareTo メソッドはデフォルトで大文字と小文字を区別することに注意してください。