1、集合的創(chuàng)建與遍歷
1.1、List集合的創(chuàng)建
在Java中常用的集合有ArrayList闻妓、LinkedList、HashSet掠械、HashMap
由缆,現(xiàn)在我們有一個(gè)需求:創(chuàng)建一個(gè)包含很多水果名稱(chēng)的集合,在Java中可以創(chuàng)建一個(gè)ArrayList然后將水果名稱(chēng)一個(gè)個(gè)添加進(jìn)去猾蒂,當(dāng)然在Kotlin中也可以這么做:
val list=ArrayList<String>()
list.add("Apple")
list.add("Banana")
list.add("Orange")
list.add("Pear")
-
1均唉、listOf創(chuàng)建不可變結(jié)合
這種寫(xiě)法比較繁瑣,為此Kotlin提供了一個(gè)內(nèi)置函數(shù)listOf
來(lái)簡(jiǎn)化初始化集合的寫(xiě)法
val list= listOf("Apple","Banana","Orange","Pear")
一行代碼就能完成list的初始化肚菠,但是要注意的是通過(guò)listOf
創(chuàng)建的是不可變集合舔箭,即不能進(jìn)行增刪改
只能查。使用for-in
不僅可以對(duì)區(qū)間進(jìn)行遍歷蚊逢,還可以遍歷集合层扶。
val list = listOf("Apple", "Banana", "Orange", "Pear")
for (fruit in list) {
println(fruit)
}
-
2、mutableListOf創(chuàng)建可變集合
如何創(chuàng)建可變集合呢烙荷?Kotlin中使用mutableListOf
就可以創(chuàng)建可變的集合了
val list = mutableListOf("Apple", "Banana", "Orange", "Pear",12)
list.add("Watermelon")
for (fruit in list) {
println(fruit)
}
如果想同時(shí)利用到角標(biāo)和角標(biāo)對(duì)應(yīng)的元素镜会,使用如下遍歷方式
for((index,result) in list.withIndex()){
println("position is $index, result is $result")
}
-
3、arrayListOf創(chuàng)建可變的ArrayList集合
我們還可以使用arrayListOf
來(lái)創(chuàng)建可變的集合
val list = arrayListOf("Apple", "Banana", "Orange", "Pear",12)
list.add("Watermelon")
for (fruit in list) {
println(fruit)
}
1.2奢讨、Set集合的創(chuàng)建
-
1稚叹、setOf創(chuàng)建不可變的set集合
上面我們介紹了List
集合的創(chuàng)建,下面我們看下Set
集合的創(chuàng)建
val set= setOf("Orange","Apple", "Banana", "Pear")
for(fruit in set){
println(fruit)
}
使用setOf
創(chuàng)建的集合依然是不可變集合拿诸,我們可以使用hashSetOf
來(lái)創(chuàng)建可變集合
- 2扒袖、hashSetOf創(chuàng)建可變集合HashSet
val set= hashSetOf("Orange","Apple", "Banana", "Pear")
set.add("Watermelon")
for(fruit in set){
println(fruit)
}
set集合底層是采用hash映射機(jī)制來(lái)存儲(chǔ)數(shù)據(jù)的,所以集合中的元素是無(wú)序的亩码,這是和List集合最大的不同季率。
1.3、Map的創(chuàng)建
傳統(tǒng)的Map用法是先創(chuàng)建一個(gè)HashMap描沟,然后一個(gè)個(gè)鍵值對(duì)的形式存入數(shù)據(jù)飒泻。
val map=HashMap<Int,String>()
map.put(1,"Apple")
map.put(2,"Banana")
map.put(3,"Orange")
map.put(4,"Pear")
但是在Kotlin中并不建議使用get()、put()
來(lái)對(duì)數(shù)據(jù)進(jìn)行讀取和添加的操作吏廉,而是更加推薦一種類(lèi)似于數(shù)組下標(biāo)的語(yǔ)法結(jié)構(gòu)泞遗,比如向Map中添加一條數(shù)據(jù)可以這么寫(xiě):
map[1]="Apple"
從map中讀取一條數(shù)據(jù)可以這么寫(xiě)
val fruitName=map[4]
上述代碼經(jīng)過(guò)優(yōu)化修改如下:
val map=HashMap<Int,String>()
map[1]="Apple"
map[2]="Banana"
map[3]="Orange"
map[4]="Pear"
當(dāng)然這還不是最簡(jiǎn)單的方法,Kotlin依然提供了mapOf席覆、hashMapOf史辙、mutableMapOf
方式初始化map,mapOf
依然是創(chuàng)建不可變集合,hashMapOf聊倔、mutableMapOf
創(chuàng)建的是可變集合晦毙。
val map= mapOf(1 to "Apple",2 to "Banana", 3 to "Orange",4 to "Pear")
val hashMap= hashMapOf(1 to "Apple",2 to "Banana", 3 to "Orange",4 to "Pear")
hashMap[5]="Watermelon"
val mutableMap= mutableMapOf(1 to "Apple",2 to "Banana", 3 to "Orange",4 to "Pear")
mutableMap[5]="WaterMelon"
注意to
不是關(guān)鍵字而是infix
函數(shù),這個(gè)我們后面再說(shuō)耙蔑,下面看下map的遍歷见妒,仍然使用的是for-in
循環(huán)
val map= mapOf(1 to "Apple",2 to "Banana", 3 to "Orange",4 to "Pear")
for((number,fruit) in map){
println("水果編號(hào):"+number+" 水果名稱(chēng):"+fruit)
}
在遍歷時(shí)我們將map的鍵值對(duì)聲明在一對(duì)括號(hào)里,在遍歷時(shí)會(huì)同時(shí)對(duì)鍵和值進(jìn)行賦值甸陌。