2017-09-15 71 views

回答

6

如果你有一個可變的集合:

val list = mutableListOf(1, 2, 3) 
list += 4 

如果你有一個不變的集合:

var list = listOf(1, 2, 3) 
list += 4 

請注意,我使用val作爲可變列表來強調該對象總是相同的,但它的字nt改變。

在不可變列表的情況下,你必須使它成爲var。具有附加值的+=運算符創建了一個新對象。

+2

在不可變列表中執行'+ =',需要將列表中的所有元素複製到新的可變列表中,然後將其重新分配給您的實際列表。我不知道這是合適的聲明你的列表爲'var'。無論如何,聲明一個var對我來說不是一個好主意。 – crgarridos

+1

如果一個列表是不可變的,那麼沒有其他選項將其聲明爲'var'。如果一個不可變列表被聲明爲'val',那麼列表不能永遠改變。只是將它重新分配給另一個變量是可能的。 – guenhter

+0

的確,我不想允許改變我的變量的引用。它可能會在外部/併發任務中產生副作用。更好地創建一個副本來提取邏輯。但這不在問題的範圍之內。 – crgarridos

3

如果你想專門用java的ArrayList,那麼你可以做這樣的事情:

fun initList(){ 
    val list: ArrayList<String> = ArrayList() 
    list.add("text") 
    println(list) 
} 

否則@guenhter答案是你正在尋找的人。

0

Kotlin中的收藏默認爲只讀,因此listOf,mapOf等返回集合,您無法添加元素。 例如,List<out T>是一箇中央接口,其中out關鍵字指示元件T僅由產生的而不是consumed。結果,只有size,get等可以被調用。 MutableList<T>接口另一方面也可以消耗T s,即add是允許的。

val numbers: MutableList<Int> = mutableListOf(1, 2, 3) 
val readOnlyView: List<Int> = numbers 
println(numbers)  // prints "[1, 2, 3]" 
numbers.add(4) 
println(readOnlyView) // prints "[1, 2, 3, 4]" 
readOnlyView.clear() // -> does not compile 

正如你所看到的,STDLIB包括這樣的可變(寫)方法的集合,以及:mutableListOfmutableSetOf()

欲瞭解更多詳情,請看看at the docs

相關問題