package com.zsw.myandroidlearnapplication.kotlin
import android.os.Build
import androidx.annotation.RequiresApi
/**
*@author zengsuwa
*@date 2023/4/25
*@desc 基礎(chǔ)練習(xí)
*/
class Base02(private var name: String) {
}
@RequiresApi(Build.VERSION_CODES.N)
fun main() {
//list創(chuàng)建和元素的獲取學(xué)習(xí)
//不可變集合
val list = listOf("aaa", "bbb", "ccc", "ddd")
//普通取值 索引 內(nèi)部是運(yùn)算符重載 [] == get
println(list[0])
println(list[1])
println(list[2])
println(list[3])
// println(list[4])//崩潰,數(shù)組下標(biāo)越界
//我們寫(xiě)KT代碼一定不會(huì)再出現(xiàn)空指針異常,下標(biāo)越界異常
// 防止崩潰的取值方式 getOrElse getOrNull 盡量使用這種方式取值毙玻,體現(xiàn)KT的亮點(diǎn)
//getOrNull 一般配合?:(空并操作符)一起使用過(guò)
println(list.getOrElse(3) { "越界" })
println(list.getOrElse(4) { "越界" })
println(list.getOrNull(4))
println(list.getOrNull(4) ?: "你越界了哦")
//打恿逝!::
//aaa
//bbb
//ccc
//ddd
//ddd
//越界
//null
//可變集合
val list2: MutableList<String> = mutableListOf<String>(
"aaa", "bbb",
"ccc", "vvv"
)
list2.add("ddd")
list2.remove("vvv")
println(list2)//[aaa, bbb, ccc, ddd]
// list.add("vvv") 不可變集合報(bào)錯(cuò)沒(méi)有此功能
//不可變集合 to 可變集合
val list3 = list.toMutableList()
list3.add("eee")
println(list3)//[aaa, bbb, ccc, ddd, eee]
//可變集合 to 不可變集合
val list4 = list2.toList()
// list4.add("eee")不可變集合報(bào)錯(cuò)沒(méi)有此功能
println(list4)//[aaa, bbb, ccc, ddd]
//mutator 函數(shù)學(xué)習(xí)
//mutator的特性 += -= 其實(shí)背后就是運(yùn)算符重載而已
list2 += "lll"
list2 -= "aaa"
println(list2)//[bbb, ccc, ddd, lll]
list2.removeIf { true }
println(list2)//[]
//
//removeIf
val list5 = mutableListOf("aaa", "bbb", "ccc", "vvv")
list5.removeIf {
println(it)
it.contains("aa")//如果是包含aa時(shí)返回true 就表示刪除
}//自動(dòng)遍歷整個(gè)可變集合缘揪,進(jìn)行一個(gè)元素一個(gè)元素的輸出
println(list5)//這個(gè)只是輸出list詳情而已叉钥,這個(gè)不是遍歷
//打印
//aaa
//bbb
//ccc
//vvv
//[bbb, ccc, vvv]
//遍歷list
//第一種方式
for (i in list5) {
print("元素:$i ")
}
println()
//第二種方式
list5.forEach {
print("元素:$it ")
}
println()
//第三種方式 帶下標(biāo)
list5.forEachIndexed { index, item ->
println("下標(biāo)是$index,數(shù)據(jù)為$item")
}
//解構(gòu)語(yǔ)法過(guò)濾元素
//集合配合解構(gòu)語(yǔ)法
val list6 = mutableListOf("aaa", "bbb", "ccc", "vvv")
val (value1, value2, value3, value4) = list6
// value1 = "jaha"報(bào)錯(cuò) val 是只讀的
println("value1 = $value1, value2 = $value2, value3 = $value3, value4 = $value4,")
//打印結(jié)果:value1 = aaa, value2 = bbb, value3 = ccc, value4 = vvv,
var (value11, value22, value33, value44) = list6
value11 = "ok"
println("value11 = $value11, value22 = $value22, value33 = $value33, value44 = $value44,")
//打印結(jié)果:value11 = ok, value22 = bbb, value33 = ccc, value44 = vvv,value11 = ok, value22 = bbb, value33 = ccc, value44 = vvv,
//_不是變量口注,_表示屏蔽接收涡真,不接收賦值給我分俯,內(nèi)部不會(huì)賦值,可以節(jié)約一點(diǎn)性能
val (_, a1, _, a2) = list6//這里表示第一個(gè)和第三個(gè)值不接收
println("a1=$a1, a2=$a2")
//打印結(jié)果:a1=bbb, a2=vvv
//todo KT Set創(chuàng)建與元素獲取
// set集合不會(huì)出現(xiàn)重復(fù)元素
val set = setOf<String>("aaa", "sss", "ddd", "fff", "fff")
println(set)//[aaa, sss, ddd, fff]
// set[0]//報(bào)錯(cuò)哆料,set沒(méi)有這樣[]的功能
println(set.elementAt(0))
println(set.elementAt(1))
println(set.elementAt(2))
println(set.elementAt(3))
// println(set.elementAt(4))//崩潰缸剪,會(huì)越界
//使用list 或set 集合取值時(shí)盡量使用這種方式,防止越界崩潰
println(set.elementAtOrElse(3) { "越界了" })//fff
println(set.elementAtOrElse(4) { "越界了" })//越界了
println(set.elementAtOrNull(4))//null
println(set.elementAtOrNull(4) ?: "你越界了")//你越界了
val set2 = mutableSetOf<String>("aaa", "sss", "ddd", "fff", "fff")
set2 += "ddd"
set2 += "hhh"
set2 -= "aaa"
set2.add("bbbb")
set2.remove("sss")
println(set2)//[ddd, fff, hhh, bbbb]
set2.removeIf {
it.contains("dd")
}
println(set2)//[fff, hhh, bbbb]
//list去除重復(fù)元素
val list7 = listOf<String>("aaa", "sss", "ddd", "fff", "fff")
println(list7)//[aaa, sss, ddd, fff, fff]
val set3 = list7.toSet()
println(set3)//[aaa, sss, ddd, fff]
val list8 = list7.toSet().toList()
println(list8)//[aaa, sss, ddd, fff]
val list9 = list7.distinct()//源碼實(shí)現(xiàn)其實(shí)就是 list7.toMutableSet().toList()
println(list9)//[aaa, sss, ddd, fff]
/**
* kt 中各種數(shù)組類(lèi)型 雖然說(shuō)引用類(lèi)型东亦,背后可編譯成Java的基本數(shù)據(jù)類(lèi)型
* IntArray intArrayOf
* DoubleArray doubleArrayOf
* FloatArray floatArrayOf
* LongArray longArrayOf
* ShortArray shortArrayOf
* CharArray charArrayOf
* ByteArray byteArrayOf
* BooleanArray booleanArrayOf
* Array arrayOf 對(duì)象數(shù)組
*/
val intArray = intArrayOf(1, 2, 3, 4)
println(intArray[0])//1
println(intArray[1])//2
println(intArray[2])//3
println(intArray[3])//4
// println(intArray[4])//崩潰杏节,會(huì)越界
println(intArray.elementAtOrElse(3) { -1 })//4
println(intArray.elementAtOrElse(4) { -1 })//-1
println(intArray.elementAtOrNull(4) ?: "越界了")//越界了
val doubleArray = doubleArrayOf(2.0, 3.4, 5.3)
println(doubleArray[0])//2.0
println(doubleArray[1])//3.4
println(doubleArray[2])//5.3
val charArray = listOf('A', 'B', 'C', 'D').toCharArray()
println(charArray)//ABCD
arrayOf(Base02("haha"), Base02("ooo"), Base02("heihei"))
//Map
//這兩種創(chuàng)建方式是等價(jià)的
val map = mapOf("ss" to 12, "xiaoming" to 20, "zengzeng" to 30)
val map2 = mapOf(Pair("ss", 12), Pair("xiaoming", 20), Pair("zengzeng", 30))
//方式一 [] 背后對(duì)[]運(yùn)算符重載了
println(map["ss"])//12
println(map["xxxx"])//不會(huì)崩潰會(huì)返回null
//方式2 getOrDefault
println(map.getOrDefault("xiaoming", -1))//20
println(map.getOrDefault("xxxx", -1))//-1
println(map.getOrDefault("xxxx", "沒(méi)有這個(gè)key"))//沒(méi)有這個(gè)key
//方式3 getOrElse
println(map.getOrElse("zengzeng"){"-1"})//30
println(map.getOrElse("XXXXX"){-1})//-1
println(map.getOrElse("XXXXX"){"沒(méi)有這個(gè)key"})//沒(méi)有這個(gè)key
//遍歷map
//方式1
map2.forEach{
println("K:${it.key},V:${it.value}")
}
println()
//方式2
map2.forEach { key, value ->
println("key:${key},value:${value}")
}
println()
//方式3
map2.forEach {(key, value) ->
println("key:${key},value:${value}")
}
println()
//方式4
for (entry in map2) {
println("K:${entry.key},V:${entry.value}")
}
println()
val map3 = mutableMapOf(Pair("ss", 12), Pair("xiaoming", 20), Pair("zengzeng", 30))
map3 += Pair("susan", 20)
map3 += "jerry" to 22
map3 -= "ss"
map3.put("CCC",999)
map3["ddd"]=888 //put 和[] 是等價(jià)的
//getOrPut
// 如果整個(gè)map集合中沒(méi)有key元素,我就幫你添加到幾個(gè)集合中典阵,然后再?gòu)膍ap集合中取出
// 如果整個(gè)map集合中有key元素奋渔,我就從map集合中取出,直接給你壮啊,相當(dāng)于666這個(gè)備用值就失效了
val jjj = map3.getOrPut("JJJ"){555}
println(jjj)//555
val ccc = map3.getOrPut("CCC"){666}
println(ccc)//999
}
kotlin練習(xí)2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)岁钓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)升略,“玉大人,你說(shuō)我怎么就攤上這事屡限∑废” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵囚霸,是天一觀的道長(zhǎng)腰根。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拓型,這世上最難降的妖魔是什么额嘿? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮劣挫,結(jié)果婚禮上册养,老公的妹妹穿的比我還像新娘。我一直安慰自己压固,他們只是感情好球拦,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帐我,像睡著了一般坎炼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拦键,一...
- 那天谣光,我揣著相機(jī)與錄音,去河邊找鬼芬为。 笑死萄金,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媚朦。 我是一名探鬼主播氧敢,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼询张!你這毒婦竟也來(lái)了孙乖?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎的圆,沒(méi)想到半個(gè)月后鼓拧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體半火,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡越妈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钮糖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅掠。...
- 正文 年R本政府宣布且叁,位于F島的核電站,受9級(jí)特大地震影響秩伞,放射性物質(zhì)發(fā)生泄漏逞带。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一纱新、第九天 我趴在偏房一處隱蔽的房頂上張望展氓。 院中可真熱鬧,春花似錦脸爱、人聲如沸遇汞。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)空入。三九已至,卻和暖如春族檬,著一層夾襖步出監(jiān)牢的瞬間歪赢,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓看尼,卻偏偏與公主長(zhǎng)得像递鹉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藏斩,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 那么下面是第一道練習(xí)題: When it comes to basic operations, it's a go...
- 這一期是關(guān)于數(shù)組和循環(huán)的練習(xí)題: 第一題是這樣的: val array = // initalize array ...
- 題目描述:1.1.14 Write a static method lg() that takes an int ...
- when分支練習(xí) when表達(dá)式 例子1 例子2 例子3 例子4 例子5 例子6 例子7 例子8
- Kotlin練習(xí)----if分支結(jié)構(gòu)練習(xí) if 分支 常見(jiàn)形式: 第一種形式 第二種形式 第三種形式 注意事項(xiàng)通常...