Java の Arrays.sort() メソッドは、配列の要素をソートするために使用されます。
- コンパレータを使用して、配列全体、サブ配列、さらにはカスタム オブジェクトを並べ替える柔軟なオプションを提供します。
- プリミティブ配列 (int char など) とオブジェクト配列 (Integer String など) の両方をソートできます。
例: 整数配列と文字配列を昇順でソートする
Java
import java.util.Arrays; class Geeks{ public static void main(String[] args) { // Integer array int[] arr1 = {2 -1 3 4}; // Character array char[] arr2 = {'b' 'a' 'c' 'b'}; // Sorting arrays in ascending order Arrays.sort(arr1); Arrays.sort(arr2); // Print sorted arrays System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
出力
[-1 2 3 4] [a b b c]
説明:
- Arrays.sort() は要素を昇順に並べ替えます。
- 重複は削除されません。
- プリミティブ配列ではカスタム コンパレータを使用できません。
Arrays.sort() メソッドの構文
1. 配列全体をソートするには
Arrays.sort();
2. 部分配列をソートするには
public static void sort(int[] arr int from_Index int to_Index) ;
パラメータ:
- 到着しました : ソートする配列。
- from_Index: ソートされる最初の要素 (両端を含む) のインデックス。
- to_Index : ソートされる最後の要素 (排他的) のインデックス。
- 戻り値の型: void (このメソッドは何も返しません)。
注記:
- Arrays.sort() は重複を削除しません。要素の順序を変更するだけです。
- プリミティブ型ではカスタム コンパレータを使用できません。並べ替えは自然 (昇順) 順に行われます。
例 : サブ配列のソート
開始 (包含) インデックスと終了 (排他的) インデックスを指定することで、配列の一部を並べ替えることができます。
Java
import java.util.Arrays; public class Geeks{ public static void main(String[] args){ int[] arr = {2 -1 4 3}; // Sort elements from index 1 to 3 Arrays.sort(arr 1 4); // Print array after sorting subarray System.out.println(Arrays.toString(arr)); } }
出力
[2 -1 3 4]
説明: インデックス 1、2、および 3 の要素のみが並べ替えられます。インデックス 0 の要素は変更されません。
降順ソート
配列を降順に並べ替えるには、Arrays.sort() メソッドと Collections.reverseOrder() をコンパレーターとして使用できます。
Javaimport java.util.Arrays; import java.util.Collections; public class Geeks{ public static void main(String[] args) { // Integer array Integer[] arr = {2 -1 3 4}; Arrays.sort(arr Collections.reverseOrder()); System.out.println(Arrays.toString(arr)); // String array String[] str = {'Hii' 'Vishnu' 'chauhan'}; Arrays.sort(str Collections.reverseOrder()); System.out.println(Arrays.toString(str)); } }
出力
[4 3 2 -1] [chauhan Vishnu Hii]
説明:
- オブジェクト配列に対してのみ機能します。プリミティブ型 (int) ではコンパレータを使用できません。
- 文字列の場合、辞書順に Z -> A にソートされます。
コンパレータを使用したカスタム並べ替え
を使用してカスタム並べ替えロジックを定義することで、オブジェクトの配列を並べ替えることができます。 コンパレータインターフェース 。
Javaimport java.util.*; // Custom class class Student{ int roll; String name; String address; Student(int roll String name String address){ this.roll = roll; this.name = name; this.address = address; } // Print student details public String toString() { return roll + ' ' + name + ' ' + address; } } // Comparator to sort by roll number class SortByRoll implements Comparator<Student>{ public int compare(Student s1 Student s2){ return s1.roll - s2.roll; } } class Geeks { public static void main(String[] args){ Student[] students = { new Student(1 'Ram' 'MP') new Student(2 'Shyam' 'UP') new Student(3 'Hari' 'Delhi') }; // Sort using custom comparator Arrays.sort(students new SortByRoll()); // Print sorted students for (Student s : students) System.out.println(s); } }
出力
1 Ram MP 2 Shyam UP 3 Hari Delhi
説明:
- Comparator を使用すると、クラスを変更せずにカスタムの並べ替えロジックが可能になります。
- ここでは学生はロール番号順に並べ替えられます。
同等のインターフェイスによる自然な並べ替え
以下の例では、Student オブジェクトの配列を名前に基づいてアルファベット順に並べ替えます。
Javaimport java.util.Arrays; class Student implements Comparable<Student>{ int r; String n; String a; // Constructor public Student(int r String n String a){ this.r = r; this.n = n; this.a = a; } // compareTo method to sort by name public int compareTo(Student o){ return this.n.compareTo(o.n); } // toString() method to print Student details public String toString() { return this.r + ' ' + this.n + ' ' + this.a; } } public class Geeks{ public static void main(String[] args){ Student[] s = { new Student(1 'Ram' 'UP') new Student(2 'Shyam' 'MP') new Student(3 'Hari' 'Bihar') }; // Sorting students by name in alphabetical order Arrays.sort(s); for (Student student : s) System.out.println(student); } }
出力
3 Hari Bihar 1 Ram UP 2 Shyam MP
説明:
- この例では、 同等のインターフェース Student オブジェクトの自然な順序を定義します。
- このメソッドを実装することで、生徒の名前に基づいた並べ替えを有効にして、2 つの Student オブジェクトを比較する方法を指定します。
これにより、Student オブジェクトの配列に対して Arrays.sort() メソッドを直接使用して、オブジェクトを順序で並べ替えることができるようになり、別個のコンパレーターは必要なくなります。