1. Gambaran keseluruhan
Dalam tutorial ini, kita akan membincangkan kaedah biasa untuk menyusun susunan mengikut urutan menaik dan menurun.
Kami akan melihat menggunakan kaedah penyortiran kelas Java Arrays serta menerapkan Comparator kita sendiri untuk memerintahkan nilai array kita.
2. Definisi Objek
Sebelum kita mulakan, mari kita tentukan dengan cepat beberapa tatasusunan yang akan kita susun sepanjang tutorial ini. Pertama, kami akan membuat susunan int dan susunan rentetan:
int[] numbers = new int[] { -8, 7, 5, 9, 10, -2, 3 }; String[] strings = new String[] { "learning", "java", "with", "baeldung" };
Dan mari kita buat pelbagai objek Kakitangan di mana setiap pekerja mempunyai atribut id dan nama
Employee john = new Employee(6, "John"); Employee mary = new Employee(3, "Mary"); Employee david = new Employee(4, "David"); Employee[] employees = new Employee[] { john, mary, david };
3. Menyusun mengikut Susunan Menaik
Kaedah util.Arrays.sort Java memberi kita cara cepat dan mudah untuk menyusun pelbagai primitif atau objek yang menerapkan antara muka yang Sebanding dalam urutan menaik.
Semasa menyusun primitif, kaedah Arrays.sort menggunakan pelaksanaan Dual-Pivot Quicksort. Walau bagaimanapun, ketika menyusun objek, pelaksanaan MergeSort digunakan berulang.
3.1. Primitif
Untuk menyusun susunan primitif dalam urutan menaik, kami meneruskan susunan kami ke kaedah pengisihan :
Arrays.sort(numbers); assertArrayEquals(new int[] { -8, -2, 3, 5, 7, 9, 10 }, numbers);
3.2. Objek Yang Melaksanakan Sebanding
Untuk objek yang melaksanakan antara muka yang Sebanding , seperti dengan array primitif kami, kami juga boleh meneruskan susunan kami ke kaedah pengisihan :
Arrays.sort(strings); assertArrayEquals(new String[] { "baeldung", "java", "learning", "with" }, strings);
3.3. Objek yang Tidak Melaksanakan Sebanding
Menyusun objek yang tidak melaksanakan Antaramuka Berbanding , seperti susunan Karyawan kami , menghendaki kami menentukan pembanding kami sendiri.
Kami dapat melakukan ini dengan mudah di Java 8 dengan menentukan harta benda yang ingin kami bandingkan objek Karyawan kami di dalam Perbandingan kami :
Arrays.sort(employees, Comparator.comparing(Employee::getName)); assertArrayEquals(new Employee[] { david, john, mary }, employees);
Dalam kes ini, kami telah menetapkan bahawa kami ingin memerintahkan pekerja kami dengan atribut nama mereka .
Kita juga dapat menyusun objek kita pada lebih dari satu atribut dengan merantai perbandingan kita menggunakan kaedah Comparator's kemudianComparing :
Arrays.sort(employees, Comparator.comparing(Employee::getName).thenComparing(Employee::getId));
4. Menyusun mengikut Urutan Menurun
4.1. Primitif
Menyusun susunan primitif dalam urutan menurun tidak semudah menyusunnya mengikut urutan menaik kerana Java tidak menyokong penggunaan Perbandingan pada jenis primitif. Untuk mengatasi kekurangan ini kita mempunyai beberapa pilihan.
Pertama, kami dapat menyusun susunan kami mengikut urutan menaik dan kemudian melakukan pembalikan susunan di tempat.
Kedua, boleh menukar array kami ke senarai, menggunakan kaedah Guava's Lists.reverse () dan kemudian menukar senarai kami kembali menjadi array.
Akhirnya, kami dapat mengubah susunan kami ke Aliran dan kemudian memetakannya kembali ke array int . Ia mempunyai kelebihan yang bagus untuk menjadi satu kapal dan hanya menggunakan Java inti:
numbers = IntStream.of(numbers).boxed().sorted(Comparator.reverseOrder()).mapToInt(i -> i).toArray(); assertArrayEquals(new int[] { 10, 9, 7, 5, 3, -2, -8 }, numbers);
Sebab kerja-kerja ini adalah bahawa berkotak -gilir setiap int ke dalam Integer , yang tidak melaksanakan Comparator.
4.2. Objek Yang Melaksanakan Sebanding
Menyusun susunan objek yang menerapkan antara muka Berbanding dalam urutan menurun agak mudah. Yang perlu kita lakukan adalah melewati Perbandingan sebagai parameter kedua kaedah penyortiran kita .
Di Java 8 kita dapat menggunakan Comparator.reverseOrder () untuk menunjukkan bahawa kita ingin array kita disusun dalam urutan menurun:
Arrays.sort(strings, Comparator.reverseOrder()); assertArrayEquals(new String[] { "with", "learning", "java", "baeldung" }, strings);
4.3. Objek yang Tidak Melaksanakan Sebanding
Begitu juga dengan menyusun objek yang dapat dilaksanakan setanding, kita dapat membalikkan susunan Perbandingan khusus kita dengan menambahkan terbalik () pada akhir definisi perbandingan kita:
Arrays.sort(employees, Comparator.comparing(Employee::getName).reversed()); assertArrayEquals(new Employee[] { mary, john, david }, employees);
5. Kesimpulan
Dalam artikel ini, kami membincangkan bagaimana menyusun susunan primitif dan objek mengikut urutan menaik dan menurun menggunakan kaedah Susunan .
Seperti biasa, kod sumber dari artikel ini boleh didapati di Github.