Array 概念簡單,效能也很好,不過也因為它的限制比較多,所以除非真的有效能考量,不然一般會考慮使用其他的 Collection 物件,享受更豐富的功能。在這篇文章裡,要為大家介紹 List 物件。
List 的許多特點跟 Array 差不多,一樣是一個有格子的容器,可以承裝相同型別的資料,也是用 zero-index 來編號。與 Array 不同的是,List 有兩種,一種是容量與內容都不可變的 List
、一種則是可以動態改變容量及內容的 MutableList
。
宣告 List 很簡單,Kotlin 標準函式庫提供了兩個函數 listOf()
用來宣告一個靜態的 List、mutableListOf()
用來宣告一個動態的 List。
val listOfNumbers = listOf(2, 3, 5, 6, 7)
val mutableListOfNumbers = mutableListOf(2, 3, 5, 6, 7)
透過 Kotlin 的型別推斷,listOfNumbers
的型別就會是 List<Int>
、mutableListOfNumbers
的型別則會是 MutableList<Int>
。要注意的是,List 一樣只能放相同型別的資料喔!
假如今天需要宣告一個空的 List 或 MutableList,則有幾種可行的作法:
val emptyList = listOf<Int>()
val emptyMutableList = mutableListOf<Int>()
val emptyListByEmptyList = emptyList<Int>()
當我們把資料放進 List 或 MutableList 後,我們可以用 index、get()
方法或迴圈來取得其中的資料:
val firstValue = listOfNumbers[0] // 取得 index 是 0 的值
val secondValue = listOfNumbers.get(2) // 取得 index 是 2 的值
for (item in listOfNumbers) {
println(item) // 會一行一行印出 2 3 5 6 7
}
我們也可以用 List 的屬性或方法來取得 List 的資訊,或是做資料處理:
val listOfNumbers = listOf(2, 3, 5, 6, 7)
val size = listOfNumbers.size // 以屬性取得 List 的大小
val sum = listOfNumbers.sum() // 計算出 List 裡所有數字的總合
val average = listOfNumbers.average() // 計算出 List 裡所有數字的平均值
val min = listOfNumbers.minOrNull() // 取出 List 裡的最小值或 Null
val max = listOfNumbers.maxOrNull() // 取出 List 裡的最大值或 Null
Array 的長度不能改,但內容卻可以改的特點往往讓人糊塗。而 List 的設計就顯得清楚,想要固定長度、不可更改的話就用 List
;想要彈性長度、可以更改的話就用 MutableList
。其他功能及操作方式基本上是跟 Array 相同的,後續的章節也會介紹更多 List 好用的技巧。不過,List 並沒有限制其中的內容是否重複,假如你想要一個不會重複的 List 的話,就得改用 Set
,我們會在下一章會大家介紹。