Penjelasan terperinci tentang cara Java menggunakan kelas Array untuk mengisih tatasusunan
Dalam pengaturcaraan Java, selalunya perlu untuk mengisih tatasusunan. Untuk memudahkan proses pengisihan, Java menyediakan kelas Array, yang mengandungi beberapa kaedah pengisihan yang biasa digunakan. Artikel ini akan memperkenalkan kaedah pengisihan kelas Array secara terperinci dan menunjukkan penggunaannya melalui contoh kod.
Kelas Arrays menyediakan dua kaedah pengisihan terlebih beban, iaitu isihan dan parallelSort. Yang pertama digunakan untuk mengisih tatasusunan secara bersiri, manakala yang terakhir digunakan untuk mengisih tatasusunan secara selari.
1.1 kaedah isihan
Kaedah isihan digunakan untuk menyusun tatasusunan secara bersiri. Ia mempunyai berbilang kaedah terlebih beban, dan kaedah berbeza boleh dipilih berdasarkan keperluan pengisihan.
Kod sampel adalah seperti berikut:
import java.util.Arrays; public class ArraySortExample { public static void main(String[] args) { int[] arr = {5, 2, 9, 1, 3}; System.out.println("排序前:" + Arrays.toString(arr)); Arrays.sort(arr); System.out.println("排序后:" + Arrays.toString(arr)); } }
Keputusan yang dijalankan adalah seperti berikut:
排序前:[5, 2, 9, 1, 3] 排序后:[1, 2, 3, 5, 9]
1.2 kaedah Isih selari
Kaedah Isih selari digunakan untuk mengisih tatasusunan secara selari. Berbanding dengan kaedah isihan, ia boleh menyelesaikan operasi isihan dengan lebih cepat dan sesuai untuk tatasusunan berskala lebih besar.
Kod sampel adalah seperti berikut:
import java.util.Arrays; public class ArrayParallelSortExample { public static void main(String[] args) { int[] arr = {5, 2, 9, 1, 3}; System.out.println("排序前:" + Arrays.toString(arr)); Arrays.parallelSort(arr); System.out.println("排序后:" + Arrays.toString(arr)); } }
Hasil yang dijalankan adalah seperti berikut:
排序前:[5, 2, 9, 1, 3] 排序后:[1, 2, 3, 5, 9]
Kaedah pengisihan dalam kelas Arrays menggunakan algoritma isihan pantas yang dioptimumkan (Dual-Pivot Quicksort), yang menyediakan Quicksort Dwi-Pivot prestasi yang lebih baik dalam kebanyakan kes Prestasi tinggi. Algoritma ini berdasarkan idea bahagi dan takluk, dengan memilih dua elemen pangsi untuk membahagikan tatasusunan kepada tiga bahagian: bahagian yang lebih kecil daripada elemen pangsi, bahagian yang sama dengan elemen pangsi, dan bahagian yang lebih besar daripada pangsi. unsur. Kemudian operasi pengisihan dilakukan secara rekursif pada dua bahagian yang dibahagikan.
Kerumitan masa bagi algoritma isihan pantas ialah O(nlogn), dengan n ialah panjang tatasusunan.
Apabila menggunakan kelas Tatasusunan untuk menyusun tatasusunan, anda perlu memberi perhatian kepada perkara berikut:
3.1 Perlu melaksanakan antara muka Setanding
Jika anda ingin mengisih tatasusunan objek kelas tersuai, kelas mesti melaksanakan antara muka Sebanding, dan mengatasi kaedah compareTo. Ini membolehkan saiz objek dibandingkan dengan betul semasa proses pengisihan.
Kod sampel adalah seperti berikut:
import java.util.Arrays; class Student implements Comparable<Student> { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } @Override public int compareTo(Student o) { return this.score - o.score; } @Override public String toString() { return name + ": " + score; } } public class StudentSortExample { public static void main(String[] args) { Student[] students = {new Student("Tom", 90), new Student("Jerry", 80)}; System.out.println("排序前:" + Arrays.toString(students)); Arrays.sort(students); System.out.println("排序后:" + Arrays.toString(students)); } }
Keputusan yang dijalankan adalah seperti berikut:
排序前:[Tom: 90, Jerry: 80] 排序后:[Jerry: 80, Tom: 90]
3.2 Pengoptimuman prestasi pengisihan selari
Apabila pengisihan selari boleh digunakan, jika panjang tatasusunan kurang daripada ambang lalai (8192 digunakan dalam kelas Tatasusunan), Algoritma isihan sisipan akan digunakan untuk pengisihan. Algoritma isihan sisipan mempunyai prestasi yang lebih baik pada data berskala kecil.
Untuk meningkatkan lagi prestasi pengisihan selari, anda boleh memaksa penggunaan algoritma isihan gabungan tradisional dengan menetapkan sifat sistem java.util.Arrays.useLegacyMergeSort
kepada benar. Ini mengelakkan penggunaan isihan sisipan dalam kes isihan selari. java.util.Arrays.useLegacyMergeSort
为true,强制使用传统的归并排序算法。这样可以在并行排序的情况下避免使用插入排序。
示例代码如下:
import java.util.Arrays; public class ArrayParallelSortPerformanceExample { public static void main(String[] args) { int[] arr = {5, 2, 9, 1, 3}; System.out.println("排序前:" + Arrays.toString(arr)); System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); Arrays.parallelSort(arr); System.out.println("排序后:" + Arrays.toString(arr)); } }
本文详细介绍了Java中使用Arrays类进行数组排序的方法。通过调用sort方法可以对数组进行串行排序,而调用parallelSort方法可以对数组进行并行排序。并行排序的性能优于串行排序,适用于大规模数据。在使用自定义类的对象数组进行排序时,需要实现Comparable接口。同时,通过设置java.util.Arrays.useLegacyMergeSort
java.util.Arrays.useLegacyMergeSort
kepada benar, prestasi pengisihan selari boleh dioptimumkan lagi. Menguasai kaedah pengisihan kelas Arrays boleh menangani masalah pengisihan tatasusunan dengan lebih cekap dalam pengaturcaraan. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang kaedah Java menggunakan kelas Arrays untuk menyusun tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!