kotlin练习 ---- 集合练习

kotlin练习 - 集合练习

Set集合

  • Set集合创建
fun main(args: Array<String>) {
    //创建不可变集合,返回Set
    var set = setOf("java", "kotlin", "go")
    println(set)//[java, kotlin, go]
    println("setOf 返回类型 ${set.javaClass}")

    //创建可变集合,返回值MutableSet
    var mutablemap = mutableListOf("java", "kotlin", "go")
    mutablemap[0] = "JavaScript"
    println(mutablemap)//[JavaScript, kotlin, go]
    println("mutableListOf 返回类型 ${mutablemap.javaClass}")

    //创建LinkedHashSet集合
    var linkedHashSet = linkedSetOf("java", "kotlin", "go")
    println(linkedHashSet)
    println("linkedHashSet 返回类型 ${linkedHashSet.javaClass}")

    //创建HashSet集合
    var hashSet = hashSetOf("java", "kotlin", "go")
    println(hashSet)//不保证元素的顺序--[kotlin, go, java]

    //创建TreeSet集合
    var treeSet = sortedSetOf("java", "kotlin", "go")
    println(treeSet)//集合按从小到大排列--[go, java, kotlin]
}
  • Set集合的使用
   //创建不可变集合,返回Set
    var set = setOf("java", "kotlin", "go")

    //判断是否所有的元素长度都大于5  ------所有元素都满足条件
    println(set.all { it.length > 5 })// false

    //判断是否任意一元素的长度大于5  ------任意元素都满足条件
    println(set.any { it.length > 5 })//true

    //以Lambda 表达式的值为key , 集合元素为value ,组成的Map集合
    var map = set.associateBy({ "我正在学习${it}" })
    println(map)//{我正在学习java=java, 我正在学习kotlin=kotlin, 我正在学习go=go}

    //使用in、!in运算符
    println("java" in set)// true
    println("java" !in set)// false

    //删除Set集合前面两个元素
    var dropedList = set.drop(2)
    println(dropedList)// [go]

    //对Set集合进行过滤: 需要得到所有包含 va 的集合,
    var filteredList1 = set.filter({ "va" in it })//如果没有返回空元素的集合
    println(filteredList1)//[java]

    //查找Set集合中包含 va 的元素,如果找到就返回该元素,否则返回 null
    var filteredList2 = set.find({ "o" in it })
    println(filteredList2)//kotlin
    var filteredList3 = set.find({ "va1" in it })
    println(filteredList3)//null

    //将Set集合中所有字符串拼接在一起
    var foldedList1 = set.fold("", { acc, s -> acc + s })
    println(foldedList1)//javakotlingo
    var foldedList2 = set.fold("456", { acc, s -> acc +" 123 ${s}"  })
    println(foldedList2)//456 123 java 123 kotlin 123 go
    //查找某个元素的出现位置------没有就会返回-1
    println(set.indexOf("kotlin"))// 1
    println(set.indexOf("kotlin1"))// -1
    
      //循环遍历
    var books = setOf("疯狂java讲义", "疯狂kotlin讲义", "疯狂IOS讲义", "疯狂android讲义")
    for (book in books){
        println(book)
    }
    books.forEach({
        println(it)
    })
    for (i in books.indices){
        println(books.elementAt(i))
    }
    
    var books = mutableSetOf("疯狂java讲义")
      //新增
    books.addAll(setOf("疯狂kotlin讲义", "疯狂IOS讲义"))
    books.add("疯狂android讲义")
    println(books.toString())//[疯狂java讲义, 疯狂kotlin讲义, 疯狂IOS讲义, 疯狂android讲义]
    //删除
    books.remove("疯狂kotlin讲义")
    println(books.toString())//[疯狂java讲义,疯狂IOS讲义, 疯狂android讲义]
    books.removeAll(setOf("疯狂java讲义"))
    println(books.toString())//[疯狂IOS讲义, 疯狂android讲义]
    //清空所有
    books.clear()
    println(books.toString())//[]
    //只保留公共的元素
    books = mutableSetOf("疯狂java讲义", "疯狂kotlin讲义", "疯狂IOS讲义", "疯狂android讲义")
    books.retainAll(setOf("疯狂kotlin讲义", "疯狂PHP讲义", "疯狂android讲义"))
    println(books.toString())//[疯狂kotlin讲义, 疯狂android讲义]

List集合

  • List集合创建
    var list1 = listOf(1, 2, 3, 4, 5, null, 7, 8, 9)
    println(list1.toString())//[1, 2, 3, 4, 5, null, 7, 8, 9]
    var list2 = listOfNotNull(1, 2, 3, 4, 5, null, 7, 8, 9)
    println(list2.toString())//[1, 2, 3, 4, 5, 7, 8, 9]
    var list3 = mutableListOf(1, 2, 3, 4, 5, null, 7, 8, 9)
    println(list3.toString())//[1, 2, 3, 4, 5, null, 7, 8, 9]
    list3.add(10)
    list3.set(5, 6)
    println(list3.toString())//[1, 2, 3, 4, 5, 6, 7, 8, 9,10]
    var list4 = arrayListOf(1, 2, 3, 4, 5, null, 7, 8, 9)
    println(list4.toString())//[1, 2, 3, 4, 5, null, 7, 8, 9]
    list4.set(5, 6)
    list4.add(10)
    println(list4.toString())//[1, 2, 3, 4, 5, 6, 7, 8, 9,10]
  • List集合的使用
 //遍历List
    var list1 = listOf("Java", null, "Kotlin", "Go")
    list1.forEach {
        println(it)
    }
    for (str in list1) {
        println(str)
    }
    for (i in list1.indices) {
        println(list1[i])
        println("get = ${list1.get(i)}")
        println("elementAt = ${list1.elementAt(i)}")
    }
    var index = list1.indexOf("Go")
    println("Go 在数组中的位置:${index}")//3

    var list2 = mutableListOf(1, 2, 3, 1, 8, 3, 4, 6, 1, 4, 2, 3)
    //最后一次出现的的位置
    var last1 = list2.lastIndexOf(2)//10
    //最后一次出现的的位置
    var last2 = list2.indexOfLast { it == 2 }//10
    //第一次出现的位置
    var first = list2.indexOfFirst { it == 2 }//1
    println("2在数组中第一次出现在${first},最后一次出现在${last1},${last2}")
    //返回集合
    var list3 = listOf("Java", null, "Kotlin", "PHP", null, "Go")
    var sublist = list3.subList(2, 5)//从第2个到第5个之间的元素
    println(sublist.toString())//[Kotlin, PHP, null]
//    var list4 = mutableListOf("Java", "JavaScript", null, "HTML", "Kotlin", null, "Python", "PHP", "Go")
    var list4 = mutableListOf("Java", null, "HTML", "Go")
    println(list4)//[Java, null, HTML, Go]
    //新增
    list4.add("Python")
    list4.add(2, "C++")
    list4.addAll(listOf("Kotlin", null))
    println(list4)//[Java, null, C++, HTML, Go, Python, Kotlin, null]
    //删除
    list4.removeAt(1)
    println(list4)//[Java, C++, HTML, Go, Python, Kotlin, null]
    //list4[6] ="CSS";
    list4.set(6, "CSS")
    println(list4)//[Java, C++, HTML, Go, Python, Kotlin, CSS]
    list4.remove("Go")
    println(list4)//[Java, C++, HTML, Python, Kotlin, CSS]
    list4.add(3, "Go")
    list4.add(5, "Go")
    println(list4)//[Java, C++, HTML, Go, Python, Go, Kotlin, CSS]
    //替换元素
    list4.replaceAll {
        if (it.equals("Go")) {
            "go"
        } else {
            it
        }
    }
    println(list4)//[Java, C++, HTML, go, Python, go, Kotlin, CSS] 
    //删除
    list4.removeAll(listOf("go"))
    println(list4)//[Java, C++, HTML, Python, Kotlin, CSS]

    //清空
    list4.clear()
    println(list4)//[]

Map集合

  • Map集合创建
    //不可变map集合
    var map1 = mapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    println(map1)//{Java=1, JavaScript=2, HTML=3, Kotlin=4}
    //可变集合MutableMap
    var map2 = mutableMapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    println(map2)//{Java=1, JavaScript=2, HTML=3, Kotlin=4}
    map2.put("Python", 5)
    println(map2)//{Java=1, JavaScript=2, HTML=3, Kotlin=4, Python=5}
    map2.remove("JavaScript")
    println(map2)//{Java=1, HTML=3, Kotlin=4, Python=5}
    //HashMap集合----不保证key-value的顺序
    var map3 = hashMapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    println(map3)//{Java=1, HTML=3, JavaScript=2, Kotlin=4}
    //LinkedHashMap集合---key-value按添加顺序排列
    var map4 = linkedMapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    println(map4)//{Java=1, JavaScript=2, HTML=3, Kotlin=4}
    //SortedMap集合------ key-value按key由小到大排列
    var map5 = sortedMapOf("Java" to 1, "Python" to 5, "HTML" to 3, "Kotlin" to 4, "JavaScript" to 2, "Go" to 6)
    println(map5)//{Go=6, HTML=3, Java=1, JavaScript=2, Kotlin=4, Python=5}

  • Map集合的使用
    var map1 = mapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    //当map集合中所有key-value对都满足条件返回true
    var all = map1.all {
        it.key.length >= 4 && it.value > 0
    }
    println(all)//true
    //当map集合中任意一个key-value对满足条件就会返回true
    var any = map1.any {
        it.key.length >= 10 && it.value > 1
    }
    println(any)//true
    //判断map集合中是否有对于key的key-value
    println("Java" in map1);//true
    println("Java" !in map1);//false
    println("Go" in map1);//false
    println("Go" !in map1);//true

    //对map进行过滤,要求key中包含:Java
    var filterMap1 = map1.filter { "Java" in it.key }
    println(filterMap1)//{Java=1, JavaScript=2}
    var filterMap2 = map1.filter { it.key in "Java" }
    println(filterMap2)//{Java=1}
    //通过map集合,返回一个新的List
    var mappedList1 = map1.map { "《疯狂${it.key}》讲义,第${it.value}个" }
    var mappedList2 = map1.map { "《疯狂${it.key}》讲义" to "第${it.value}个" }
    println(mappedList1)//[《疯狂Java》讲义,第1个, 《疯狂JavaScript》讲义,第2个, 《疯狂HTML》讲义,第3个, 《疯狂Kotlin》讲义,第4个]
    println(mappedList2)//[(《疯狂Java》讲义, 第1个), (《疯狂JavaScript》讲义, 第2个), (《疯狂HTML》讲义, 第3个), (《疯狂Kotlin》讲义, 第4个)]
    //Map集合中key-value对中 value最大的值
    var maxby1 = map1.maxBy { it.value }
    println(maxby1)//Kotlin=4

    //Map集合中key-value对中 value最小的值
    var minby1 = map1.minBy { it.value }
    println(minby1)//Java=1

    //Map集合中key-value对中 key的长度最大的值
    var maxby2 = map1.maxBy { it.key.length }
    println(maxby2)//JavaScript=2

    //Map集合中key-value对中 key的长度最小的值
    var minby2 = map1.minBy { it.key.length }
    println(minby2)//Java=1

    var map2 = mapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4)
    var map3 = mapOf("Python" to 1, "Go" to 2, "HTML" to 3, "Kotlin" to 4)
    //集合相加---相当于并集
    println(map2 + map3)//{Java=1, JavaScript=2, HTML=3, Kotlin=4, Python=1, Go=2}
    //集合相减---减去公共的元素
    println(map2 - map3)//{Java=1, JavaScript=2, HTML=3, Kotlin=4}

    var plus = map2.plus(map3)
    println(plus)//{Java=1, JavaScript=2, HTML=3, Kotlin=4, Python=1, Go=2}

    var minus = map2.minus(map3)
    println(minus)//{Java=1, JavaScript=2, HTML=3, Kotlin=4}
    //遍历Map集合
    var map4 = mapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4, "Go" to 5)
    for (en in map4.entries) {
        println("${en.key} -> ${en.value}")
    }
    for (key in map4.keys) {
        println("${key} -> ${map4[key]}")
    }
    for ((key, value) in map4) {
        println("${key} -> ${value}")
    }
    map4.forEach({
        println("${it.key} -> ${it.value}")
    })

    var map5 = mutableMapOf("Java" to 1, "JavaScript" to 2, "HTML" to 3, "Kotlin" to 4, "Go" to 5)
    map5["Go"] = 0
    println(map5)//{Java=1, JavaScript=2, HTML=3, Kotlin=4, Go=0}
    map5.put("HTML", 10)
    println(map5)//{Java=1, JavaScript=2, HTML=10, Kotlin=4, Go=0}
    map5.remove("Go")
    println(map5)//{Java=1, JavaScript=2, HTML=10, Kotlin=4}
    map5.remove("Java", 2)
    println(map5)//{Java=1, JavaScript=2, HTML=10, Kotlin=4}
    map5.remove("Java", 1)
    println(map5)//{JavaScript=2, HTML=10, Kotlin=4}
    map5.putAll(hashMapOf("PHP" to 6, "C++" to 7,"JavaScript" to 8 ))
    println(map5)//{JavaScript=8, HTML=10, Kotlin=4, PHP=6, C++=7}
    //清空Map集合
    map5.clear()
    println(map5)//{}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容