栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

kotlin基础教程:<5>集合与数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

kotlin基础教程:<5>集合与数组

上一期我们讲了内置函数的使用,其重点就在于内置函数的it和this,哪一些具有this,哪一些具有it,还有就是返回值,是对象本身还是最后一行;我们在对计算机上的文件进行操作试,可能会一直通过一个对象来点出函数调用,这样的话很繁琐,而这些内置函数的一个链式调用就很好的解决了这个问题,因为都是有返回值的,而且返回的还是对象本身,比如apply函数;

那么这一期就开始我们会常用的的数据存储这一块,集合和数组,我们就做一个简单介绍然后代码演示,虽然语言简单,但是代码都是很清晰的,大家会用就可以,毕竟学过一门编程语言之后,这些差不多用到的东西还是很好理解的,集合和数组都是用来存放一些数据的,在我们的Android开发过程中会大量用到,所以大家务必要理解这一期的内容:

list集合

1、创建:

含有两种类型,一种是不可变类型,一种是可变类型,可变类型具有add和remove的操作,但是这两者可以相互转化,不管是什么变量,kotlin始终是将类型放在变量名的后面,而且强大的类型推断可以简化很多代码:

    
    //1.1 创建list
    //不可变的list
    val list1: List = listOf("孙悟空","猪八戒","沙和尚")
​
    //可变的,注意后面的mutable首字母小写
    val list2: MutableList = mutableListOf("孙悟空","猪八戒","沙和尚")
    //1.2 简化写法
    
    //1.3 可以变和不可变之间还可以互相转化
    //不可变转可变
    val list3 = list1.toMutableList()
    //可变转不可变
    val list4 = list2.toList()

可变和不可变就是是否可以对集合进行修改,这里表示的数据添加与删除; 

2、数据的添加和移除:

    //2.1 可变集合的增删操作
    //添加,第二种独特的添加方式本质上是运算符重载
    list2.add("唐僧")
    list3 += "唐僧"
    //删除
    list2.remove("猪八戒")
    list3 -= "猪八戒"

这是kotlin的独特之处,是将很多种语言的优势集于一身的语言;可以通过运算符重载的当时来直接使用运算符在对元素进行操作,使用加减等于进行数据的修改 其实效果和add、remove是一样的;

3、集合的遍历:

含有三种常用的遍历方式,kotlin大量使用匿名函数:

    //2.2 集合的遍历
    //增强for
    println("增强for遍历:")
    for (s in list1) {
        print("$s  ")
    }
    //foreach,主要就是使用it代表每一个元素
    println("foreach遍历:")
    list1.forEach{
        print("$it  ")
    }
    //foreachindexed带有下标的遍历
    println("foreachindexed带有下标的遍历")
    
    list1.forEachIndexed{
        index,item ->
        print("下标:${index} 元素:${item} ")
    }

直接使用匿名函数遍历,因为匿名函数在kotlin里面非常简洁,而且还方便好用;

4、集合的解构和过滤:

有时候我们先要一次性拿到所有集合中的元素,而有时候有些元素我们又不想要,就需要使用到我们的解构和过滤了:

//2.3 解构和过滤集合
    //解构,直接用括号传结合表示解构
    val (v1,v2,v3) = list1
    //过滤:使用下划线来过滤掉不需要的数据
    val (_,v4,v5) = list1
    println("v1:${v1} v2:${v2} v3:${v3}")
    println("v4:${v4} v5:${v5} ")
set集合

1、创建

与list一样具有可变和不可变性,当然简便写法也有,我就不演示了:

 //2.4 set集合
    
    //创建:同样含有可变和不可变
    //不可变
    val set1: Set = setOf("Tony","hello","Tony")
    println("set1: $set1")
    //可变
    val set2: MutableSet = mutableSetOf("Tony","hello","Tony")
​

2、获取元素

set是不具有[]方式获取的,建议使用下面两种方式获取不会出现越界的错误

 
    val str1 = set1.elementAt(0)
    println(str1)
​
    val str2 = set1.elementAtOrElse(10){"你越界了"}
    val str3 = set1.elementAtOrNull(1)?: {"你越界了"}
    println(str2)
    println(str3)

3、对于可变集合的添加和删除元素:

    //可变的具有add和remove操作
    set2.add("唐僧")
    set2.remove("hello")
    println(set2)

4、对于灵活性,就是可以list和set相互转化,达到一个去重的效果:

    //2.5 list 和set 的相互转化
    val set3 = list1.toSet()
    //如果我们需要给list去重的话,就是这样
    list1 = list1.toSet().toList()
    //这样写太繁琐,其实还有简便写法:
    list1 = list1.distinct()
    println(list1)
array数组

array数组常用在一些基本的数据类型当中,而且list也可以在一些char、对象和数字类型转换为数组:

//2.6 array数组
    
    //创建:直接写简化写法,类型推断,和集合是一样的
    val array1 = arrayOf(1,2,3,4,5)
    //获取元素:和set一样,不过通过elementatorelse获取的时候提示一定是整型
    val arrayvalue1 = array1.elementAtOrElse(1){-1}
    val arrayvalue2 = array1.elementAtOrNull(10)?: "越界了"
    println(arrayvalue1)
    println(arrayvalue2)
    //list 转数组,只支持char、对象和数字类型
    val array2 = listOf('a','b').toCharArray()
    println(array2)

数组的结果是没有中括号的;查找元素的话就和集合差不多,就是在使用elementAtOrElse的时候,后面返回的只能是整型数值;其他是一样的,不支持修改;

不管是哪一种数据结构,重点就是学习他的创建,获取元素和遍历,三种遍历方式,一般的,创建集合具有可变集合和不可变集合,而且他们灵活到可以互相转换,使用set去重等,内容不多却很重要,大家要多多练习

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号