kotlin練習(xí)2

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

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嫉鲸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歹啼,更是在濱河造成了極大的恐慌玄渗,老刑警劉巖座菠,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異藤树,居然都是意外死亡浴滴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)岁钓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)升略,“玉大人,你說(shuō)我怎么就攤上這事屡限∑废” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵囚霸,是天一觀的道長(zhǎng)腰根。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拓型,這世上最難降的妖魔是什么额嘿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮劣挫,結(jié)果婚禮上册养,老公的妹妹穿的比我還像新娘。我一直安慰自己压固,他們只是感情好球拦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帐我,像睡著了一般坎炼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拦键,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天谣光,我揣著相機(jī)與錄音,去河邊找鬼芬为。 笑死萄金,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媚朦。 我是一名探鬼主播氧敢,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼询张!你這毒婦竟也來(lái)了孙乖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎的圆,沒(méi)想到半個(gè)月后鼓拧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體半火,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡越妈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钮糖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅掠。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖店归,靈堂內(nèi)的尸體忽然破棺而出阎抒,到底是詐尸還是另有隱情,我是刑警寧澤消痛,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布且叁,位于F島的核電站,受9級(jí)特大地震影響秩伞,放射性物質(zhì)發(fā)生泄漏逞带。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一纱新、第九天 我趴在偏房一處隱蔽的房頂上張望展氓。 院中可真熱鬧,春花似錦脸爱、人聲如沸遇汞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)空入。三九已至,卻和暖如春族檬,著一層夾襖步出監(jiān)牢的瞬間歪赢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工导梆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轨淌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓看尼,卻偏偏與公主長(zhǎng)得像递鹉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藏斩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容