Kotlin - 列表



Kotlin 列表是有序的專案集合。Kotlin 列表可以是可變的(mutableListOf)或只讀的(listOf)。列表的元素可以使用索引訪問。Kotlin 可變或不可變列表可以包含重複元素。

建立 Kotlin 列表

對於列表建立,使用標準庫函式listOf()用於只讀列表,mutableListOf()用於可變列表。

為了防止意外修改,透過將可變列表轉換為 List 來獲取其只讀檢視。

示例

fun main() {
    val theList = listOf("one", "two", "three", "four")
    println(theList)
    
    val theMutableList = mutableListOf("one", "two", "three", "four")
    println(theMutableList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[one, two, three, four]
[one, two, three, four]

遍歷 Kotlin 列表

有多種方法可以遍歷 Kotlin 列表。讓我們逐一學習它們

使用 toString() 函式

fun main() {
    val theList = listOf("one", "two", "three", "four")
    println(theList.toString())
}

執行以上 Kotlin 程式時,將生成以下輸出

[one, two, three, four]

使用迭代器

fun main() {
    val theList = listOf("one", "two", "three", "four")
    
    val itr = theList.listIterator() 
    while (itr.hasNext()) {
        println(itr.next())
    }
}

執行以上 Kotlin 程式時,將生成以下輸出

one
two
three
four

使用 for 迴圈

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   for (i in theList.indices) {
      println(theList[i])
   }
}

執行以上 Kotlin 程式時,將生成以下輸出

one
two
three
four

使用 forEach

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   theList.forEach { println(it) }
}

執行以上 Kotlin 程式時,將生成以下輸出

one
two
three
four
注意 - 這裡的it在 Java 中類似於this運算子。

Kotlin 列表的大小

我們可以使用size屬性獲取列表中元素的總數

fun main() {
    val theList = listOf("one", "two", null, "four", "five")
    
    println("Size of the list " + theList.size)
}

執行以上 Kotlin 程式時,將生成以下輸出

Size of the list 5

"in" 運算子

in運算子可用於檢查列表中是否存在某個元素。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   if("two" in theList){
      println(true)
   }else{
      println(false)
   }
}

執行以上 Kotlin 程式時,將生成以下輸出

true

contain() 方法

contain()方法也可用於檢查列表中是否存在某個元素。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")

   if(theList.contains("two")){
      println(true)
   }else{
      println(false)
   }
    
}

執行以上 Kotlin 程式時,將生成以下輸出

true

isEmpty() 方法

如果集合為空(不包含任何元素),isEmpty()方法返回true,否則返回false

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   if(theList.isEmpty()){
      println(true)
   }else{
      println(false)
   }
}

執行以上 Kotlin 程式時,將生成以下輸出

false

indexOf() 方法

indexOf()方法返回列表中指定元素第一次出現的索引,如果列表中不包含指定元素,則返回 -1。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")
    
   println("Index of 'two' :  " + theList.indexOf("two"))
}

執行以上 Kotlin 程式時,將生成以下輸出

Index of 'two' :  1

get() 方法

get()方法可用於獲取列表中指定索引處的元素。第一個元素的索引為零。

示例

fun main() {
   val theList = listOf("one", "two", "three", "four")

   println("Element at 3rd position " + theList.get(2))
}

執行以上 Kotlin 程式時,將生成以下輸出

Element at 3rd position three

列表新增

我們可以使用+運算子將兩個或多個列表新增到一個列表中。這會將第二個列表新增到第一個列表中,即使重複元素也會被新增。

示例

fun main() {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("four", "five", "six")
    val resultList = firstList + secondList
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[one, two, three, four, five, six]

列表減法

我們可以使用-運算子從另一個列表中減去一個列表。此操作將從第一個列表中刪除公共元素並返回結果。

示例

fun main() {
    val firstList = listOf("one", "two", "three")
    val secondList = listOf("one", "five", "six")
    val resultList = firstList - secondList
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[two, three]

列表切片

我們可以使用slice()方法從給定列表中獲取子列表,該方法利用元素索引的範圍。

示例

fun main() {
    val theList = listOf("one", "two", "three", "four", "five")
    val resultList = theList.slice( 2..4)
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[three, four, five]

刪除列表中的 null

我們可以使用filterNotNull()方法從 Kotlin 列表中刪除null元素。

fun main() {
    val theList = listOf("one", "two", null, "four", "five")
    val resultList = theList.filterNotNull()
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[one, two, four, five]

過濾元素

我們可以使用filter()方法過濾出與給定謂詞匹配的元素。

fun main() {
    val theList = listOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultList = theList.filter{ it > 30}
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[31, 40, 50]

刪除前 N 個元素

我們可以使用drop()方法刪除列表中的前 N 個元素。

fun main() {
    val theList = listOf(10, 20, 30, 31, 40, 50, -1, 0)
    val resultList = theList.drop(3)
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[31, 40, 50, -1, 0]

分組列表元素

我們可以使用groupBy()方法對與給定謂詞匹配的元素進行分組。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.groupBy{ it % 3}
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

{1=[10, 31, 40], 0=[12, 30, 9, -3, 0]}

對映列表元素

我們可以使用map()方法使用提供的函式對映所有元素。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.map{ it / 3 }
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[3, 4, 10, 10, 13, 3, -1, 0]

列表元素分塊

我們可以使用chunked()方法從列表中建立給定大小的塊。根據列表中元素的總數,最後一個塊的元素數量可能與塊大小不相同。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.chunked(3)
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[[10, 12, 30], [31, 40, 9], [-3, 0]]

列表元素視窗化

我們可以使用windowed()方法透過在元素集合上移動給定大小的滑動視窗來建立元素範圍列表。

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.windowed(3)
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[[10, 12, 30], [12, 30, 31], [30, 31, 40], [31, 40, 9], [40, 9, -3], [9, -3, 0]]

預設情況下,滑動視窗每次移動一步,但我們可以透過傳遞自定義步長值來更改它

fun main() {
    val theList = listOf(10, 12, 30, 31, 40, 9, -3, 0)
    val resultList = theList.windowed(3, 3)
    
    println(resultList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[[10, 12, 30], [31, 40, 9]]

Kotlin 可變列表

我們可以使用mutableListOf()建立可變列表,稍後我們可以使用add()在同一列表中新增更多元素,並且可以使用remove()方法從列表中刪除元素。

fun main() {
    val theList = mutableSetOf(10, 20, 30)

    theList.add(40)
    theList.add(50)
    println(theList)

    theList.remove(10)
    theList.remove(30)
    println(theList)
}

執行以上 Kotlin 程式時,將生成以下輸出

[10, 20, 30, 40, 50]
[20, 40, 50]

測驗時間 (面試與考試準備)

問題 1 - 我們可以將可變的 Kotlin 列表設為不可變的嗎?

A - 是的

B - 否

答案:A

解釋

是的,我們可以透過將可變列表轉換為 List 來將其設為不可變。

問題 2 - 我們可以使用 + 運算子新增兩個或多個列表並建立一個列表嗎?

A - 正確

B - 錯誤

答案:A

解釋

是的,我們可以新增或減去兩個 Kotlin 列表並生成第三個列表。

答案:A

解釋

get() 方法用於從給定索引獲取列表元素。

廣告

© . All rights reserved.