List與MutableList
唯讀List
語法
val 變數: List<類型> = listOf(物件, 物件, 物件..)
只能讀取,不能修改。
1
2
3
4
val names : List < String > = listOf ( "Tom" , "Jack" , "lucy" )
for ( name in names ) {
println ( name )
}
建立可讀寫MutableList
建立MutableList
1
val mutableList = mutableListOf < String >( "Alice" , "Bill" , "Gina" )
建立空的MutableList
1
val mutableList : MutableList < Int > = mutableListOf ()
MutableList新增刪除修改
新增
1
2
3
mutableList . add ( "Ray" )
// 指定插入的索引位置
mutableList . add ( 1 , "Tina" )
刪除
1
2
3
mutableList . remove ( "Alice" )
// 指定刪除索引位置
mutableList . removeAt ( 0 )
刪除前判斷有存在才刪。
1
2
3
val mutableList = mutableListOf < String >( "Alice" , "Bill" , "Gina" )
mutableList . removeIf { it . contains ( "Alice" ) }
println ( mutableList )
清空
1
2
mutableList . clear ()
println ( mutableList )
安全取值
get(索引)可以取得元素的值,但搭配以下二種更安全。
語法
無此元素,就傳回預設值
集合變數.getOrElse(索引) { "預設值"}
無此元素傳回null,使用貓王運算子?:,印出預設值
集合變數s.getOrNull(索引) ?: "預設值"
1
2
3
4
5
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
println ( "======== list data ============" )
println ( namelist . get ( 0 ))
println ( namelist . getOrElse ( 5 ) { "no data" })
println ( namelist . getOrNull ( 5 ) ?: "no data" )
索引取值
語法
1
2
3
4
5
6
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
println ( "list[0] = ${namelist[0]}" )
println ( "list[1] = ${namelist[1]}" )
println ( "list[2] = ${namelist[2]}" )
println ( "list first = ${namelist.first()}" )
println ( "list last = ${namelist.last()}" )
list[0] = Mary
list[1] = Amy
list[2] = Jery
修改集合
1
2
3
val mutableList = mutableListOf < String >( "Alice" , "Bill" , "Gina" )
mutableList [ 0 ] = "Gee"
println ( mutableList [ 0 ])
mutator
能用在MutableList,Array無法使用。
語法
新增
1
2
3
4
val mutableList = mutableListOf < String >( "Alice" , "Bill" , "Gina" )
mutableList += "Momo"
mutableList += "Yoyo"
println ( mutableList )
[Alice, Bill, Gina, Momo, Yoyo]
刪除
1
2
3
4
5
6
7
val mutableList = mutableListOf < String >( "Alice" , "Bill" , "Gina" )
mutableList += "Momo"
mutableList += "Yoyo"
println ( mutableList )
mutableList -= "Momo"
mutableList -= "Yoyo"
println ( mutableList )
List與MutableList互轉
List轉MutableList
1
2
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
namelist . toMutableList ()
MutableList轉List
first()
取出第一個元素。
1
println ( "list first = ${namelist.first()}" )
last()
取出最後一個元素。
1
println ( "list last = ${namelist.last()}" )
size
1
2
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
println ( "list size = ${namelist.size}" )
contains
1
2
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
println ( "list contains = ${namelist.contains(" Amy ")}" )
in
與contains功能一樣,都有包含的意思。
1
2
val namelist = listOf < String >( "Mary" , "Amy" , "Jery" )
println ( "Mary" in namelist )
empty
1
2
3
4
5
val mutableList : MutableList < Int > = mutableListOf ()
if ( mutableList . isEmpty ())
println ( "empty" )
if ( mutableList . isNotEmpty ())
println ( "not empty" )
distinct()去掉重覆
1
2
3
4
val mutableList1 = mutableListOf < String >( "Alice" , "Bill" , "Gina" , "Alice" )
println ( mutableList1 )
val distinctList = mutableList1 . distinct ()
println ( distinctList )
[Alice, Bill, Gina, Alice]
[Alice, Bill, Gina]
訪問集合中所有元素
for裡面的i變數,前面不會有val或var,也不會有變數類型。
其它建立List的方式
public inline fun <T> List(size: Int, init: (Int) -> T): List<T>
建立大小為3,裡面的值為0 .. (size - 1),並把它印出來,以下沒有建立List,因為沒有傳回值。
1
2
3
List ( 3 ) {
println ( it )
}
以下有傳回值,就會建立不可變的List。
1
2
val list = List ( 3 ) { index : Int -> index }
println ( list )
Lambda{}花括號內最後一行就是要組成的格式,$it就是index索引。
1
2
3
4
val list = List ( 100 ) {
"Item $it"
}
println ( list )
1
2
val list = mutableListOf < String >()
list . addAll ( List ( 500 ) { "Item $it" })