Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで事前定義メソッドを使わずに文字列をソートする方法を解説

JavaにおけるString(文字列)は、不変(immutable)な文字の連なりを表すオブジェクトであり、一度生成するとその内容を変更することはできません。文字列オブジェクトを扱う際には、java.lang.Stringクラスを使用します。

本記事では、Arrays.sort()のようなソート用の事前定義メソッドに頼らずに、文字列内の文字をアルファベット順に並べ替える方法を紹介します。仕組みはシンプルで、隣り合う文字同士を比較しながら入れ替えていく「バブルソート」の考え方をそのまま応用しています。

処理の流れ

  1. toCharArray()で文字列をchar型の配列に変換する
  2. 二重ループですべての文字の組み合わせを比較し、順序が逆であれば入れ替える
  3. ループ完了後、整列済みの配列を1文字ずつ出力する

サンプルコード

public class SortStringWithoutPredefinedMethodsTest {
public static void main(String[] args) {
String str = "jdkoepacmbtr";
System.out.println("Before Sorting:" + str);
int j = 0;
char temp = 0;
char[] chars = str.toCharArray();
for(int i=0; i < chars.length; i++) {
for(j=0; j < chars.length; j++) {
if(chars[j] > chars[i]) {
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
}
System.out.println("After Sorting:");
for(int k=0; k < chars.length; k++) {
System.out.println(chars[k]);
}
}
}

実行結果

Before Sorting: jdkoepacmbtr
After Sorting:
a
b
c
d
e
j
k
m
o
p
r
t

ポイント解説

文字の比較はchar型同士で行われるため、実体としてはUnicodeのコードポイント(英小文字の場合はASCIIコード)の大小比較になります。そのため、小文字の英字だけで構成された文字列であれば、単純な > 演算子による比較だけで正しくアルファベット順に並べ替えられます。

なお、この自前実装の計算量はO(n²)です。文字数が多いデータや実務での処理では、Arrays.sort()など標準ライブラリを活用する方が効率的ですが、ソートアルゴリズムの仕組み理解やプログラミング試験・面接対策として、このような実装を自分で書けるようにしておくことは非常に有益です。

  1. JavaでJTableを特定の列基準でソートする方法

    JTableは、複雑なデータ構造を表形式で表示するためのJComponentクラスのサブクラスです。JTableコンポーネントはMVC(Model View Controller)デザインパターンに従って設計されており、データを行と列の形式で効率的に表示できます。 また、JTableはTableModelListener、TableColumnModelListener、ListSelectionListener、CellEditorListener、RowSorterListenerなど、さまざまなリスナーインターフェースを利用できる柔軟なコンポーネントです。 JTableを特定の列でソート

  2. JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例

    JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された