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 #

KebutuhanKoleksi yang tepat
Daftar berurutan yang sering bertambah atau berkurangList<T>
Pencarian nilai berdasarkan kunci unikDictionary<TKey, TValue>
Kumpulan unik tanpa urutan, sering dicek keanggotaannyaHashSet<T>
Proses item sesuai urutan kedatanganQueue<T>
Proses item dari yang terakhir masukStack<T>
Penyisipan dan penghapusan di tengah dataLinkedList<T>
Pasangan key-value yang selalu terurutSortedList / SortedDictionary
Elemen unik yang selalu terurutSortedSet<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.

csharp
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:

text
Buku tulis: tersedia 65 buah
Penggaris: tidak ditemukan

Mari kita telaah baris demi baris:

  1. Baris 1-6: Collection initializer mengisi tiga pasangan data stok; kunci berupa nama barang.
  2. Baris 8: Array yangDicari menampung nama yang akan dicek kasir.
  3. Baris 12 (stokProduk.TryGetValue(nama, out int jumlah)): Pencarian berlangsung lewat kunci; "Buku tulis" ditemukan sehingga cabang if mencetak stoknya.
  4. Baris 16-19: "Penggaris" tidak ada dalam Dictionary; TryGetValue mengembalikan false sehingga 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.