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

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

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

list集合

1、创建:

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

    /*
    * list的学习:
    * list含有两种,一种是不可变的(list),一种是可变的(mutablelist)
    * 可变的list具有add和remove操作;遍历它们含有三种常用的方式:增强for,
    * foreach,foreachindexed
    * */
    //1.1 创建list
    //不可变的list
    val list1: List<String> = listOf<String>("孙悟空","猪八戒","沙和尚")
​
    //可变的,注意后面的mutable首字母小写
    val list2: MutableList<String> = mutableListOf<String>("孙悟空","猪八戒","沙和尚")
    //1.2 简化写法
    /*
    因为kotlin的类型推导,我们完全可以使用简化写法来节省代码
    val list1 = listOf("孙悟空","猪八戒","沙和尚")
    val list2 = mutableListOf("孙悟空","猪八戒","沙和尚")*/
    //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带有下标的遍历")
    /*
    * 因为含有两个参数,前面是下标,后面数数据,
    * 所以我们不能使用it了
    * */
    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集合
    /*
    * set集合的创建和遍历使用都差不多,只是set集合可以做到去重操作
    * 就是同一个元素只会出现一次,后面的会覆盖前面的;利用这个特性,
    * kotlin的list可以依靠set来去重,因为它们可以互相转化
    * */
    //创建:同样含有可变和不可变
    //不可变
    val set1: Set<String> = setOf<String>("Tony","hello","Tony")
    println("set1: $set1")
    //可变
    val set2: MutableSet<String> = mutableSetOf<String>("Tony","hello","Tony")
​

2、获取元素

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

 /* 不过set不具有[]的方式获取数据,而是通过elementat()获取
   * 其实这个和list的[]差不多,直接获取有时候是会出现数组越界访问
   * 的,set有和list差不多的防止越界访问的机制
   * */
    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数组
    /*
    * 常见的有字符串数组、整型数组、浮点、char、对象数组
    * 其实list是可以转数组的,一般的基本数据类型都有数组
    * */
    //创建:直接写简化写法,类型推断,和集合是一样的
    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<Char>('a','b').toCharArray()
    println(array2)

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程学渣ズ

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值