Kita sudah mengenal delapan koleksi pada section ini. Pertanyaannya kini bukan “bagaimana memakainya”, melainkan “kapan memakai yang mana”. Koleksi yang tepat membuat logika program lebih singkat dan performanya lebih baik; koleksi yang keliru memaksa kita menulis penanganan berulang di banyak tempat.
Panduan Pemilihan Berdasarkan Kebutuhan #
| Kebutuhan | Koleksi yang tepat |
|---|---|
| Daftar berurutan yang sering bertambah atau berkurang | List<T> |
| Pencarian nilai berdasarkan kunci unik | Dictionary<TKey, TValue> |
| Kumpulan unik tanpa urutan, sering dicek keanggotaannya | HashSet<T> |
| Proses item sesuai urutan kedatangan | Queue<T> |
| Proses item dari yang terakhir masuk | Stack<T> |
| Penyisipan dan penghapusan di tengah data | LinkedList<T> |
| Pasangan key-value yang selalu terurut | SortedList / SortedDictionary |
| Elemen unik yang selalu terurut | SortedSet<T> |
Contoh: Pencarian Berdasarkan Kunci #
Ambil satu skenario untuk memperjelas: kasir mengecek stok berdasarkan nama barang. Kebutuhan “cari berdasarkan kunci” mengarahkan kita ke Dictionary — dan method TryGetValue menangani barang yang belum terdaftar tanpa exception.
Dictionary<string, int> stokProduk = new Dictionary<string, int>
{
{ "Pensil", 120 },
{ "Buku tulis", 65 },
{ "Penghapus", 90 }
};
string[] yangDicari = { "Buku tulis", "Penggaris" };
foreach (string nama in yangDicari)
{
if (stokProduk.TryGetValue(nama, out int jumlah))
{
Console.WriteLine($"{nama}: tersedia {jumlah} buah");
}
else
{
Console.WriteLine($"{nama}: tidak ditemukan");
}
}Output yang Dihasilkan:
Buku tulis: tersedia 65 buah
Penggaris: tidak ditemukanMari kita telaah baris demi baris:
- Baris 1-6: Collection initializer mengisi tiga pasangan data stok; kunci berupa nama barang.
- Baris 8: Array
yangDicarimenampung nama yang akan dicek kasir. - Baris 12 (
stokProduk.TryGetValue(nama, out int jumlah)): Pencarian berlangsung lewat kunci;"Buku tulis"ditemukan sehingga cabangifmencetak stoknya. - Baris 16-19:
"Penggaris"tidak ada dalam Dictionary;TryGetValuemengembalikanfalsesehingga program mencetak pesan tanpa memicu exception.
Pola yang sama berlaku untuk kebutuhan lain: kebutuhan urutan proses mengarah ke Queue atau Stack, dan kebutuhan keunikan mengarah ke HashSet.