Pada postingan kali ini, akan dibahas bagaimana melakukan sorting di java. Kita ingin men-sort suatu list yang distrukturkan dalam ArrayList. Kenapa ArrayList? Tidak ada alasan khusus sih. Kita bisa menggunakan struktur data yang lain, asal berupa list. Namun untuk contoh kita pakai saja ArrayList.
Ok, begini saja. Kita mulai contoh spesifik-nya. Andaikan kita ingin men-sort list yang berupa entry alamat. Tiap entry alamat terdiri dari nama dan alamat. Kita ingin men-sort list entry alamat tersebut berdasarkan nama. How is that? Cool? he..he..he (ok ,ok , not cool enough)
Sekarang darimana kita mulai? Bagaimana kalau kita mulai menulis kelas entry alamat-nya? Deal? deal….
Ini dia kelas entry alamat-nya (EntryAlamat.java):
import java.util.*;
public class EntryAlamat implements Comparable<EntryAlamat> {
private String nama;
private String alamat;
public EntryAlamat(String nama, String alamat) {
this.nama = nama;
this.alamat = alamat;
}
public String getNama() {
return nama;
}
public String getAlamat() {
return alamat;
}
public int compareTo(EntryAlamat lain) {
return nama.compareTo(lain.getNama());
}
public String toString() {
return "["+ nama + ", " + alamat + "]";
}
}
Kenapa kita bisa menulis seperti itu? Where the heck Comparable comes from? What is compareTo method?
Ok, you know what? Anggap saja sudah dari sananya, hi..hi..hi..
Sorry just kidding, ini penjelasan singkatnya. Mulanya kita ingin melakukan sorting, terus kita baca-baca di java docs, ada tidak method untuk sorting? NDilalah… kita menemukan dokumentasi yang ada di kelas Collections seperti ini:
![]()
Ternyata, di kelas Collections terdapat method sort. Method sort tersebut mengambil argumen List. Karena ArrayList mengimplementasikan interface List, maka ArrayList berupa List. Jadi ArrayList bisa di-pass-kan ke method sort. Tapi, sebagai orang yang selalu ingin tahu, kita bertanya-tanya: bagaimana method sort melakukan sorting terhadap entry alamat kita. Entry Alamat kita kan berupa objek, dan kita ingin men-sort-nya berdasarkan nama.
Kita scroll down lagi java docs-nya, dan melihat detil method sort. Hasilnya seperti ini.

Aneh memang artinya. Berhubungan dengan generics bla…bla…bla (Bisa dibaca di Head First Java
). Tapi untuk short-cut-nya, EntryAlamat kita harus mengimplementasikan interface Comparable dan meng-override method compareTo. Ini dokumentasi pada interface Comparable pada java.lang:

Jadi, method compareTo() akan dipanggil oleh salah satu objek EntryAlamat. Kemudian method compareTo() mem-pass-kan reference EntryAlamat yang lain. Objek EntryAlamat yang menjalankan method compareTo() harus memutuskan apakah EntryAlamat lain yang di-pass-kan kepadanya di-sort lebih tinggi, rendah, atau sama dalam list.
Sekarang pertanyaannya, apa yang membuat EntryAlamat yang satu lebih tinggi, rendah, atau sama dengan EntryAlamat yang lain? Inilah yang kemudian ditentukan oleh kita. Kita maunya berdasarkan apa. Kita ingin men-sort berdasarkan nama, maka kita meng-compare nama pada EntryAlamat yang satu dengan nama pada EntryAlamat yang lain. Terus, bagaimana membandingkan nama? Kita gunakan saja method compareTo yang dimiliki String. Nama kita kan berupa String, sehingga kita panggil nama dengan method compareTo(). Method ini tahu bagaimana membandingkan alphabet. Done….
Sekarang, kita coba test dengan kelas tester berikut yang didalamnya memanggil method sort pada kelas Collections (SortingEntryAlamat.java).
import java.util.*;
public class SortingEntryAlamat {
public static void main(String[] args) {
new SortingEntryAlamat().test();
}
public void test() {
ArrayList<EntryAlamat> listAlamat = new ArrayList<EntryAlamat>();
// Sampel
listAlamat.add(new EntryAlamat("Yayak", "Gedongkuning"));
listAlamat.add(new EntryAlamat("Paijo", "Babadan"));
listAlamat.add(new EntryAlamat("Andi", "Janti"));
listAlamat.add(new EntryAlamat("Budi", "Tegalrejo"));
System.out.println("Sebelum di-sort:");
System.out.println(listAlamat);
// Sort entry berdasarkan nama
Collections.sort(listAlamat);
System.out.println("\nSetelah di-sort berdasarkan nama:");
System.out.println(listAlamat);
}
}
Outputnya:

Yeepp, inilah yang kita inginkan.
Bagaimana, keren tidak? Ya,ya,ya lumayan …..
Kemudian, kita ingin tidak hanya sort berdasarkan nama, tapi juga berdasarkan alamat. Kita akan melihat cara men-sort-nya di postingan berikutnya di Sorting Bagian 2…