Jamie Chien • 2026-01-05
Kotlin 系列(2):Collections
前言
上一篇講到變數和基本型別,這篇要來講 Collections,Collections 是用來組織與管理資料的核心工具,根據資料的排列方式、重複性以及存取方式,大致上可以分成 3 種(List, Set, Map),但根據唯獨(Read-only)與可變(Mutable),又可以衍生出另外 3 個可修改的集合(MutableList, MutableSet, MutableMap),應該不難發現其實就是加上 Mutable 這個前綴!下面就來過一下這些 Collections 的差異和使用吧~
目錄
List:有序且可重複的清單
List 根據新增的順序來儲存項目,並且允許重複的項目。這就好比是排隊的人群,每個人都有一個特定的位置(也就是索引 Index),且同一個人可以重複出現在隊伍中。
List 的建立可以分成 read-only 和 mutable,建立的方式如下:
- Read-only:
listOf() - Mutable:
mutableListOf()
listOf
val readOnlyList = listOf("Apple", "Banana", "Apple")
println(readOnlyList) // Output: [Apple, Banana, Apple] (順序不變,且允許重複)
mutableListOf
val fruits = mutableListOf("Apple", "Banana")
fruits.add("Orange")
fruits[1] = "Big Banana"
println(fruits) // Output: [Apple, Big Banana, Orange]
Set:無序且獨一無二的集合
Set 是一個無序且只能儲存獨一無二值的集合。這就像你丟了一大堆硬幣到一個袋子裡面,但在袋子中,同樣面額只會計算一次,也就是說你最後會得到一個存有各個獨一無二面額的集合。
常見的使用情境是『身分證字號清單』、『標籤(Tags)』或是用來排除重複項目
Set 的建立可以分成 read-only 和 mutable,建立的方式如下:
- Read-only:
setOf() - Mutable:
mutableSetOf()
setOf
val readOnlySet = setOf("Taipei", "Taichung", "Kaohsiung", "Tainan", "Taipei")
println(readOnlySet) // Output: [Taipei, Taichung, Kaohsiung, Tainan] (重複的 Taipei 被忽略掉)
mutableSetOf
val cities = mutableSetOf("Taipei", "Tainan")
cities.add("New Taipei")
cities.add("Yilan")
println(cities) // Output: [Taipei, Tainan, New Taipei, Yilan]
Map:成雙成對的 Key-Value 對
Map 透過 key-value 對來儲存 items,在 Map 中每一個 key 都必須是獨一無二的,但對應的 value 則可以重複。Map 就像是字典或是電話簿(好老的詞 XD),可以透過『鍵(Key)』來查閱『值(Value)』。
常用的情境是『使用者帳號與個人資料的對應』、『產品 ID 與價格對照』…等
Map 的建立可以分成 read-only 和 mutable,建立的方式如下:
- Read-only:
mapOf() - Mutable:
mutableMapOf()
mapOf
val readOnlyMap = mapOf("A01" to "Allen", "A02" to "Josh")
println(readOnlyMap["A01"]) // Output: Allen
mutableMapOf
val userScores = mutableMapOf("Kotlin" to 90, "Java" to 85)
userScores["Kotlin"] = 100
userScores["Python"] = 95
println(userScores) // Output: {Kotlin=100, Java=85, Python=95}
轉換集合
在食物中,有時候會需要轉換集合類型。例如:如果有一個包含重複資料的 List,想要快速去除重複的資料,那可以這樣做:
val numbers = listOf(1, 2, 2, 3, 4, 4, 4)
val uniqueNumbers = numbers.toSet()
println(uniqueNumbers) // Output [1, 2, 3, 4]
Recap
| 種類 | 簡介 |
|---|---|
List | 有序的集合 |
Set | 無序的集合,且裡面的 items 為獨一無二的 |
Map | 使用key-value的方式儲存,且每一個 key 只能對應到一個 value |
這篇主要是概括一些常見且簡單的集合,每個集合都有一些實用的 API 可以使用(e.g. 可以用 first() 取得 List 的第一個 item),更多 API 請參考官方的 doc