List creation (listOf, mutableListOf) in Kotlin - Time & Space Complexity
When we create lists in Kotlin, it is helpful to know how the time it takes grows as the list gets bigger.
We want to understand how the work done changes when we add more items to the list.
Analyze the time complexity of the following code snippet.
val numbers = listOf(1, 2, 3, 4, 5)
val mutableNumbers = mutableListOf()
for (i in 1..5) {
mutableNumbers.add(i)
}
This code creates a fixed list with 5 items and a mutable list where items are added one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding items to the mutable list inside a loop.
- How many times: The add operation runs 5 times, once for each item.
When the list size grows, the number of add operations grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 add operations |
| 100 | 100 add operations |
| 1000 | 1000 add operations |
Pattern observation: The work grows directly with the number of items added.
Time Complexity: O(n)
This means the time to create or fill the list grows in a straight line with the number of items.
[X] Wrong: "Creating a list with many items is instant and does not depend on size."
[OK] Correct: Each item must be added or copied, so more items mean more work and more time.
Understanding how list creation time grows helps you explain efficiency when working with collections in real projects.
"What if we used a different data structure like a linked list? How would the time complexity of adding items change?"
Practice
Solution
Step 1: Understand listOf behavior
listOfcreates a fixed list that cannot be changed after creation.Step 2: Compare with mutableListOf
mutableListOfcreates a list that can be changed (add/remove items).Final Answer:
listOf -> Option AQuick Check:
Fixed list = listOf [OK]
- Confusing mutableListOf as fixed list
- Thinking arrayListOf is immutable
- Using setOf which creates a set, not a list
Solution
Step 1: Identify correct function name
The correct function to create a mutable list ismutableListOf.Step 2: Check syntax correctness
Options C and D use invalid function names. val list = listOf(1, 2, 3) creates an immutable list.Final Answer:
val list = mutableListOf(1, 2, 3) -> Option BQuick Check:
Mutable list syntax = mutableListOf(...) [OK]
- Using listOf instead of mutableListOf for mutable lists
- Misspelling mutableListOf as mutableList
- Using list() which does not exist
val list = listOf("apple", "banana", "cherry")
println(list[1])Solution
Step 1: Understand list indexing
Kotlin lists use zero-based indexing, so index 1 refers to the second item.Step 2: Identify the item at index 1
The list is ["apple", "banana", "cherry"], so index 1 is "banana".Final Answer:
banana -> Option AQuick Check:
Index 1 = second item = banana [OK]
- Thinking index 1 is the first item
- Expecting an error for valid index
- Confusing listOf with mutableListOf output
val list = listOf(1, 2, 3) list.add(4)
Solution
Step 1: Check list type
listOfcreates an immutable (read-only) list.Step 2: Understand add() method
Theadd()method is only available on mutable lists, not on immutable lists.Final Answer:
listOf creates an immutable list; add() is not allowed -> Option CQuick Check:
Immutable list cannot add items [OK]
- Trying to add to listOf list
- Ignoring immutability of listOf
- Assuming add() works on all lists
Solution
Step 1: Choose a mutable list
To add items later, the list must be mutable, so usemutableListOf.Step 2: Use add() method correctly
Callingadd("orange")on a mutable list adds the item successfully.Step 3: Check other options
val fruits = listOf("apple", "banana") fruits.add("orange") tries to add to immutable list (error). val fruits = listOf("apple", "banana") fruits += "orange" uses += on immutable list (creates new list but does not modify original). val fruits = mutableListOf("apple", "banana") fruits = fruits + "orange" tries to reassign val which is not allowed.Final Answer:
val fruits = mutableListOf("apple", "banana") fruits.add("orange") -> Option DQuick Check:
Mutable list + add() = correct way [OK]
- Adding to immutable list
- Trying to reassign val variable
- Using += on immutable list expecting mutation
Ready to prove it?
Pass the test and this pattern moves unknown
