MINGGU X : COLLECTIONS Pembahasan minggu ini adalah seputar collections. Pembahasan tentang collections adalah pembahasan tentang kegunaan collections dan beberapa jenis collections yang telah disediakan oleh C#.
Kompetensi Khusus Setelah mengikuti perkuliahan ini, diharapkan mahasiswa memahami manfaat dan penggunaan collections.
Materi Perkuliahan Array dapat digunakan sebagai media penyimpanan (storage) sekumpulan data namun array memiliki beberapa kekurangan. Salah satu kekurangan array dalam C# adalah jumlah item atau elemen array tersebut. Jumlah item atau elemen yang dapt ditampung dalam array tersebut bersifat tetap, tidak bisa berubah sesuai kebutuhan. Ada saatnya kita membutuhkan jumlah elemen yang harus disimpan dalam sebuah storage. Misalkan saja sebuah kita memiliki array bernama daftarPeserta untuk menyimpan objek peserta sebuah acara lari. Saat objek daftarPeserta tersebut dibuat, belum diketahui jumlah peserta yang akan mengikuti kegiatan. Jika menentukan ukuran array yang terlalu kecil maka ada kemungkinan jumlah peserta melebihi ukuran array yang ditentukan. Jika ukuran array ditetapkan terlalu besar, maka akan ada kemungkinan slot-slot array yang tidak terisi jika peserta yang mengikuti kegiatan tersebut sedikit jumlahnya. Hal ini tentu akan membuat penggunaan memori menjadi sia-sia. Kekurangan array lainnya adalah fleksibilitas. Setiap elemen dalam array hanya bisa diakses melalui indeks masing-masing elemen dalam array tersebut dan indeks tersebut hanya berupa angka. Kadang kita membutuhkan metode lain untuk mengakses elemen dalam array tersebut. Misalnya sebuah antrian, akses terhadap item dalam antrian membutuhkan urutan. Item yang diambil pertama sekali adalah item yang disimpan pertama sekali. Array tidak bisa memenuhi hal tersebut. Untuk mengatasi masalah diatas, C# menyediakan fasilitas yang disebut denga collections. Collections merupakan kelas-kelas yang disediakan oleh .NET yang dapat digunakan untuk menyimpan dan mengambil data dengan berbagai cara. Terdapat 2 jenis collections yaitu standard collections dan generics collections. Standar collections terdapat dalam namespace System.Generics dan Generic Collection terdapat dalam namespace System.Data.Collections yang artinya untuk menggunakan collections tersebut, namespace yang bersangkutan harus disertakan dalam kode sumber. Standard collections dianjurkan untuk tidak digunakan lagi.
Microsoft menganggap standard collections sudah deprecated dan menyediakan Generics Collections sebagai penggantinya. Namun Microsoft masih menyediakan Collections tersebut untuk kebutuhan backward copatibality jika dibutuhkan. Berikut penjelasan singkat standard collection yang ada dalam C# dan penggantinya (collection yang setara) pada Generic Collections.
ArrayList o Untuk menyimpan objek secara dinamis dan berkelanjutan o Digantikan oleh List
pada Generic Collections.
Hashtable o Sekumpulan key-value objek, tidak terurut dan asosiatif. o Digantikan oleh Dictionary pada Generic Collections.
SortedList o Sekumpulan key-value objek,terurut dan asosiatif. o Digantikan oleh SortedList pada Generic Collections.
Queue o First-in-first-out (FIFO) collection. o Digantikan oleh Queue pada Generic Collections.
Stack o Last-in-first-out (LIFO) collection. o Digantikan oleh Stack pada Generic Collections.
Pembahasan pada subbab ini lebih difokuskan kepada Generic Collections. Secara umum generic collections dibagi menjadi 2 kategori yaitu :
Associative Collections – Merupakan collections yang menyimpan nilai dalam collection berikut dengan key yang digunakan sebagai referensi terhadap nilai yang disimpan. Artinya nilai yang disimpan diasosiasikan dengan key yang disediakan.
Non-Associative Collections – Collections yang menyimmpan nilai tanpa menyertakan key untuk nilai yang disimpan.
Berikut ini adalah kelas-kelas collections yang disediakan dalam Generic Collections berikut dengan kegunaan masing-masing collections.
Pembahasan selanjutnya akan difokuskan kepada beberapa jenis collections saja
List Kelas List merupakan struktur data yang memodelkan sebuah daftar. Fungsi dari list hampir sama dengan array. Perbedaan list dengan array adalah jumlah elemen pada list bersifat dinamis, dapat bertambah/berkurang pada saat program sedang berjalan. Beberapa method (operasi) yang terdapat dalam List adalah:
Remove()
RemoveAt()
Add()
Insert()
Sort()
Contoh Penggunaan List untuk membuat daftar nama peserta dapat dilihat dari kode sumber. static void Main(string[] args) { List<string> daftarIritology = new List<string>(); //Menambahkan item ke dalam daftar daftarIritology.Add("Sujauh"); daftarIritology.Add("Sudiman"); daftarIritology.Add("Sukijan"); //Bisa juga dengan menggunakan notasi array daftarIritology[3] = "Sudirman"; daftarIritology.Insert(1, "Sukirman"); Console.WriteLine("daftarIritology[1] : {0}", daftarIritology[1]);
//Menghapus item daftarIritology.Remove("Sukirman"); daftarIritology.RemoveAt(1); foreach (String item in daftarIritology) { Console.WriteLine(item); } }
Output dari program diatas adalah sebagai berikut
LinkedList LinkedList merupakan struktur data yang juga digunakan untuk memodelkan sebuah daftar layaknya kelas List. Hanya saja LinkedList tidak menggunakan indeks. Setiap item dalam LinkedList memiliki referensi ke item selanjutnya dan item sebelumnya. Item-item yang ada dalam LinkedList hanya dapat diambil dengan cara menelusuri item-item tersebut dari awal (atau dari posisi saat ini) sampai item yang diinginkan. Method-method yang dimiliki oleh LinkedList adalah sebagai berikut:
AddFirst()
AddBefore()
AddAfter()
Remove()
RemoveFirst()
RemoveLast()
Contoh penggunaan LinkedList dapat dilihat pada kode sumber berikut ini. static void Main(string[] args) { LinkedList<string> gerbong; LinkedListNode<string> node;
gerbong = new LinkedList<string>(); gerbong.AddFirst("Parahiyangan"); gerbong.AddFirst("Sangkuni"); Console.WriteLine(gerbong.First.Value); node = gerbong.First; gerbong.AddAfter(node, "Jalaparang"); node = gerbong.Last; gerbong.AddBefore(node, "Baratayudha"); for (node = gerbong.First; node != null; node = node.Next) { string namaGerbong = node.Value; Console.WriteLine(namaGerbong); } }
Output dari program diatas adalah sebagai berikut.
Queue Kelas Queue adalah struktur data yang digunakan untuk memodelkan antrian. Antrian memiliki karakteristik FIFO (First In First Out). Item yang pertama disimpan dalam antrian akan dikeluarkan/diproses pertama kali juga. Kelas Queue memiliki 2 operasi yaitu:
Enqueue()
Dequeue()
Contoh kode kelas Queue dapat dilihat pada contoh berikut ini. static void Main(string[] args) { Queue<string> antrianPeserta = new Queue<string>(); antrianPeserta.Enqueue("Amin"); antrianPeserta.Enqueue("Badu"); string peserta01 = antrianPeserta.Dequeue(); Console.WriteLine(peserta01); antrianPeserta.Enqueue("Cica"); antrianPeserta.Enqueue("Dodi"); string peserta02 = antrianPeserta.Dequeue(); Console.WriteLine(peserta02);
Console.WriteLine("-- Antrian tersisa"); foreach (string peserta in antrianPeserta) { Console.WriteLine(peserta); } }
Output dari program diatas adalah sebagai berikut.
Stack Kelas Stack adalah struktur data generik yang memodelkan sebuah tumpukan. Tumpukan memiliki karakteristik LIFO (Last In First Out). Item yang terakhir disimpan dalam Stack akan diproses terlebih dahulu. Hal ini mirip dengan tumpukan, item yang diambil atau diproses terlebih dahulu dalam tumpukan adalah item yang paling diatas (item yang diletakkan paling terakhir). Kelas Stack memiliki 2 operasi utama yaitu Push dan Pop. Selain itu Stack juga memiliki method Peek() yang digunakan untuk melihat item yang akan diproses. Contoh penggunaan Kelas Stack dapat dilihat dari contoh berikut ini. static void Main(string[] args) { Stack<string> karduses = new Stack<string>(); karduses.Push("Aqua"); karduses.Push("Bimoli"); karduses.Push("Coklat"); string kardus01 = karduses.Pop(); Console.WriteLine("Kardus 1 : {0}", kardus01); karduses.Push("Dodol"); karduses.Push("Empal Gentong"); string kardus02 = karduses.Pop(); Console.WriteLine("Kardus 2 : {0}", kardus02); Console.WriteLine("-- Kardus tersisa"); foreach (string kardus in karduses) { Console.WriteLine(kardus); } }
Output dari program diatas adalah sebagai berikut.
Dictionary Merupakan kelas yang digunakan untuk menyimpan data dalam bentuk pasangan key/value. Setiap data yang disimpan akan diidentifikasi melalui key yang disimpan, bukan menggunakan indeksnya. Pada dasarnya Dictionary sama saja seperti List, hanya saja indek pada Dictionary lebih fleksibel dibandingkan List. Indeks yang digunakan dalam List berupa angka dan indeksnya terurut sedangkan pada Dictionary indeksnya dapat berupa tipe data lain. Hanya saja key atau indeks dalam Dictionary tidak boleh sama. Contoh penggunaan kelas Dictionary dapat dilihat pada contoh dibawah ini. static void Main(string[] args) { Dictionary<string, double> ipks = new Dictionary<string, double>(); ipks.Add("1310521001", 3.5); ipks.Add("1310522001", 3.25); //Bisa juga dengan menggunakan notasi array ipks["1310521008"] = 2.99; foreach (KeyValuePair<string, double> ipk in ipks) { Console.WriteLine("IPK {0} adalah {1}", ipk.Key, ipk.Value); } }
Output dari kode diatas adalah sebagai berikut.
SortedList SortedList merupakan Dictionary yang selalu berada dalam kondisi terurut berdasarkan key-nya.
Collection Initializer Collection Initializer merupakan salah satu metode untuk inisialisasi collection yang mendefinisikan item awal collection pada saat inisialiasi. Metode ini hanya bisa digunakan pada collection yang memiliki method Add() seperti pada List dan Dictionary. Contoh penggunaan Collection Initializer pada List adalah sebagai berikut. List<string> daftarIritology = new List<string> { "Sujauh", "Sudiman", "Sukijan", "Sudirman" };
Collection Initializer pada Dictionary berbeda dengan List. Hal ini dikarenakan pada Dictionary terdapat Key. Collection Initializer pada Dictionary dapat dilihat pada contoh berikut ini. Dictionary<string, double> ipks = new Dictionary<string, double>() { { "1310521001", 3.5 }, { "1310522001", 3.25 }, { "1310521008", 2.99 } };