JavaでカスタムオブジェクトのArrayListをプロパティ順にソートする方法
本記事では、JavaにおいてカスタムオブジェクトのArrayListを、オブジェクトが持つプロパティを基準にソートする方法を解説します。
ArrayListクラスの基本
ArrayListクラスはAbstractListクラスを継承し、Listインターフェースを実装しています。ArrayListは必要に応じて自動的にサイズが拡張される動的配列をサポートしており、柔軟なデータ管理が可能です。
ArrayListは初期サイズを指定して生成されます。要素数がそのサイズを超えると、コレクションは自動的に拡張されます。また、オブジェクトを削除した場合には、配列のサイズが縮小されることもあります。
それでは、実際の動作を見ていきましょう。
入力例
リストは以下のように定義されています Java Scala Python Mysql
期待される出力
ソート後のリスト: Java Mysql Python Scala
アルゴリズム
ステップ1 - 開始 ステップ2 - 必要な宣言を行う ステップ3 - 値を定義する ステップ4 - 「sort」メソッドを使ってリストをソートする ステップ5 - 「compareTo」メソッドを使ってリスト内のプロパティを比較する ステップ6 - 「add」メソッドを使って新しい値をリストに追加する ステップ7 - mainメソッド内でArrayListを作成し、「sort」メソッドを呼び出す ステップ8 - 結果を表示する ステップ9 - 終了
例1:main関数にすべての処理をまとめる場合
この例では、すべての操作を「main」関数の中にまとめて記述しています。
import java.util.*;
class CustomObject {
private String custom_property;
public CustomObject(String property){
this.custom_property = property;
}
public String get_custom_property(){
return this.custom_property;
}
}
public class Demo {
public static void print(ArrayList<CustomObject> input_list){
for (CustomObject object : input_list) {
System.out.println(object.get_custom_property());
}
}
public static void sort(ArrayList<CustomObject> input_list){
input_list.sort((object_1, object_2)
-> object_1.get_custom_property().compareTo(
object_2.get_custom_property()));
}
public static void add(ArrayList<CustomObject> input_list){
input_list.add(new CustomObject("Java"));
input_list.add(new CustomObject("Scala"));
input_list.add(new CustomObject("Python"));
input_list.add(new CustomObject("Mysql"));
}
public static void main(String[] args){
System.out.println("Required packages have been imported");
ArrayList<CustomObject> input_list = new ArrayList<>();
add(input_list);
System.out.println("The list is defined as ");
print(input_list);
sort(input_list);
System.out.println("\nThe list after sorting values: ");
print(input_list);
}
}
出力結果
Required packages have been imported The list is defined as Java Scala Python Mysql The list after sorting values: Java Mysql Python Scala
例2:オブジェクト指向プログラミングのスタイルで実装する場合
この例では、各操作を関数としてカプセル化し、オブジェクト指向プログラミングのスタイルで実装しています。
import java.util.*;
class CustomObject {
private String custom_property;
public CustomObject(String property){
this.custom_property = property;
}
public String get_custom_property(){
return this.custom_property;
}
}
public class Demo {
public static void main(String[] args){
System.out.println("Required packages have been imported");
ArrayList<CustomObject> input_list = new ArrayList<>();
input_list.add(new CustomObject("Java"));
input_list.add(new CustomObject("Scala"));
input_list.add(new CustomObject("Python"));
input_list.add(new CustomObject("Mysql"));
System.out.println("The number is defined as ");
for (CustomObject object : input_list) {
System.out.println(object.get_custom_property());
}
input_list.sort((object_1, object_2)
-> object_1.get_custom_property().compareTo(
object_2.get_custom_property()));
System.out.println("\nThe list after sorting values: ");
for (CustomObject object : input_list) {
System.out.println(object.get_custom_property());
}
}
}
出力結果
Required packages have been imported The number is defined as Java Scala Python Mysql The list after sorting values: Java Mysql Python Scala
まとめ
カスタムオブジェクトのArrayListをソートする際は、sortメソッドとラムダ式を組み合わせるのが最もシンプルな方法です。比較対象となるプロパティのゲッターメソッドを用意し、compareToで値を比較することで、任意のプロパティを基準とした並べ替えが簡単に実現できます。降順にソートしたい場合は、引数の順序を入れ替えるか、reversed()を使用するとよいでしょう。
-
Javaでカウンティングソート(計数ソート)を実装するプログラム
カウンティングソート(Counting Sort:計数ソート)は、異なるキー値を持つ要素がそれぞれいくつ存在するかを数え上げることで、整列を行うソートアルゴリズムです。比較ベースのソートとは異なり、要素同士を直接比較せずに出現回数を集計して並べ替えるため、値の範囲が限られているデータに対して高速に動作します。注意: 以下のコードは、負の数を含む配列にも対応しています。サンプルコードimport java.util.*; public class Demo{ static void count_sort(int[] arr){ int max_val = Arrays.s
-
カクテルソートとは?Javaでの実装方法と動作原理をわかりやすく解説
カクテルソート(Cocktail Sort)は、バブルソートを改良した整列アルゴリズムの一つで、「双方向バブルソート」や「シェーカーソート」とも呼ばれます。通常のバブルソートでは、要素を左から右への一方向にのみ走査し、大きい値から順に配列の末尾へ確定させていきます。一方、カクテルソートでは左から右、右から左へと交互に双方向の走査を行う点が大きな特徴です。これにより、配列の末尾側だけでなく先頭側にも素早く整列済みの領域が形成され、バブルソートよりも効率が向上する場合があります。カクテルソートのJavaプログラム例以下は、カクテルソートをJavaで実装したサンプルプログラムです。public cl