Collections (List, Set, Map)
Kotlin is a modern, concise language with a rich, safe collections library — Lists for ordered data, Sets for unique values, and Maps for key-value pairs, each in read-only and mutable forms.
Learn Collections (List, Set, Map) in our free Kotlin course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick…
Part of the free Kotlin course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
By the end of this lesson you'll create and traverse all three collection types and know when to choose each.
What You'll Learn in This Lesson
1️⃣ Lists
A List stores items in order and allows duplicates. listOf(...) makes a read-only list; mutableListOf(...) makes one you can change. You access items by index and iterate with a for loop.
Notice how "banana" in fruits reads almost like English — the in operator checks membership.
2️⃣ Sets and Maps
A Set keeps only unique values. A Map stores key-value pairs, built with the to keyword. Both come in read-only ( setOf , mapOf ) and mutable forms.
Looping over a map with for ((name, age) in ages) destructures each entry into its key and value — clean and readable.
Your turn. Replace the TODO , then run and compare.
Use a mutable map to track stock levels, update a quantity, and check availability.
📋 Quick Reference — Collections
Practice quiz
What is the difference between listOf and mutableListOf?
- listOf is faster
- mutableListOf cannot be iterated
- listOf is read-only; mutableListOf can add, remove, and replace
- They are identical
Answer: listOf is read-only; mutableListOf can add, remove, and replace. listOf gives a read-only list; mutableListOf can be modified.
What happens when you call add on a list created with listOf?
- It won't compile (unresolved reference: add)
- It appends silently
- It returns a new list
- It throws at runtime
Answer: It won't compile (unresolved reference: add). Read-only lists expose no add; use mutableListOf to modify.
What does a Set guarantee about its values?
- They stay sorted ascending
- They allow duplicates
- They are indexed by position
- They are unique; duplicates are dropped
Answer: They are unique; duplicates are dropped. A Set holds unique values and discards duplicates.
What does setOf(1, 2, 2, 3, 3, 3) contain?
Duplicates are dropped, leaving the unique values 1, 2, 3.
How is a Map built using the to keyword?
- mapOf("Ada" to 36) creates key-value pairs
- mapOf("Ada", 36)
- mapOf("Ada": 36)
- mapOf("Ada" => 36)
Answer: mapOf("Ada" to 36) creates key-value pairs. The to infix function creates Pair entries for the map.
What does indexing a map with map[key] return when the key is absent?
- An empty string
- Throws an exception
- null (the result type is nullable)
- Zero
Answer: null (the result type is nullable). Map indexing returns a nullable value; null means the key is missing.
What is an idiomatic way to read a map value with a fallback?
The Elvis operator ?: supplies a default when the value is null.
How do you loop over a map's entries with destructuring?
- for (entry of ages) { }
- ages.forEach(name, age)
- for name, age in ages
- for ((name, age) in ages) { }
Answer: for ((name, age) in ages) { }. Destructuring each entry into (key, value) reads cleanly.
Which collection should you prefer by default in Kotlin?
- Always mutable
- Read-only (listOf/mapOf) unless you truly need to mutate
- Always arrays
- Always Set
Answer: Read-only (listOf/mapOf) unless you truly need to mutate. Kotlin encourages read-only collections; they are safer and clearer.
When should you use a Set instead of a List?
- When you need indexed access
- When duplicates matter
- When you care about uniqueness and fast membership over order
- When order must be preserved by position
Answer: When you care about uniqueness and fast membership over order. Sets discard duplicates and offer fast contains checks.