Daftar belanja, catatan stok, dan urutan pembacaan data adalah tiga kebutuhan klasik aplikasi persediaan. Namespace System.Collections.Generic menyediakan koleksi generik siap pakai untuk ketiganya, dan seluruh koleksi tersebut berperilaku sebagai generic class yang sudah kita kenal. Bab ini memberi tur singkat tiga tipe inti; pembahasan lengkapnya tersedia pada section Koleksi Dasar.

List<T> #

List<T> menyimpan urutan item bertipe T dengan akses indeks langsung. Method Add menambah item di akhir, dan property Count menghitung isi. Karena List<T> adalah generic class, satu definisi di standard library melayani daftar string, daftar int, dan daftar tipe buatan kita sendiri dengan jaminan tipe yang sama kuatnya:

csharp
List<string> daftarBelanja = new List<string> { "Beras", "Minyak Goreng", "Telur" };
daftarBelanja.Add("Gula");

Dictionary<string, int> stokGudang = new Dictionary<string, int>();
stokGudang["Beras"] = 30;
stokGudang["Minyak Goreng"] = 15;

IEnumerable<string> barisBelanja = daftarBelanja;
foreach (string barang in barisBelanja)
{
    Console.WriteLine(barang);
}

Console.WriteLine($"Jumlah jenis barang: {daftarBelanja.Count}");
Console.WriteLine($"Stok minyak goreng: {stokGudang["Minyak Goreng"]}");

Output yang Dihasilkan:

text
Beras
Minyak Goreng
Telur
Gula
Jumlah jenis barang: 4
Stok minyak goreng: 15

Mari kita bedah baris demi baris:

  1. new List<string> { ... }: Collection initializer mengisi daftar saat pembuatan; semua elemen wajib string.
  2. daftarBelanja.Add("Gula"): List<T> tumbuh otomatis; compiler menolak argumen selain string.
  3. stokGudang["Beras"] = 30;: Indexer Dictionary<TKey, TValue> membuat atau memperbarui pasangan kunci-nilai dalam satu pernyataan.
  4. IEnumerable<string> barisBelanja = daftarBelanja;: List<T> mengimplementasikan IEnumerable<T>, sehingga daftar dapat dipandang sebagai kontrak baca umum.
  5. stokGudang["Minyak Goreng"]: Pencarian lewat kunci mengembalikan nilai int tanpa cast.

Dictionary<TKey, TValue> #

Dictionary<TKey, TValue> menyimpan pasangan kunci-nilai dan mencari nilai lewat kunci dalam waktu yang hampir konstan. Type parameter pertama menjadi tipe kunci, dan parameter kedua menjadi tipe nilai; pada contoh di atas, kunci berupa nama barang dan nilai berupa jumlah stok. Pencarian dengan kunci yang tidak ada melempar KeyNotFoundException, sehingga method ContainsKey menjadi teman pemeriksaan sebelum akses.

IEnumerable<T> #

IEnumerable<T> adalah kontrak paling longgar: ia hanya menjanjikan urutan yang dapat dibaca lewat foreach. Method yang menerima IEnumerable<T> bekerja untuk List<T>, array, dan koleksi lain tanpa mengubah satu baris pun.

Ringkasan Tiga Tipe #

KoleksiIsiKekuatan utama
List<T>Urutan item bertipe TAkses indeks, tambah dan hapus dinamis
Dictionary<TKey, TValue>Pasangan kunci-nilaiPencarian cepat lewat kunci
IEnumerable<T>Urutan baca-sajaKontrak minimal untuk foreach

IEnumerable<T> patut mendapat perhatian khusus: interface ini dideklarasikan dengan out, sehingga variance yang dibahas pada bab Covariance dan Contravariance Generics membuatnya fleksibel di sepanjang hierarki tipe.

Untuk HashSet<T>, Queue<T>, Stack<T>, dan panduan memilih koleksi yang tepat, lanjutkan ke section Koleksi Dasar.