接上篇: Kotlin学习记录(三)—— 子线程获取数据,实现简单ListView

集合在程序中的比例的很重的,Kotlin针对集合进行了更加简洁和有效的封装,这边文章就简单的介绍一下list,map,set这三个最常用集合的使用。

首先在Kotlin中,明确区分了集合的只读和可变。

Iterable接口声明了Kotlin中集合的通用方法,是最基本的接口。

MutableIterable接口继承Iterable,继承该接口的可以被迭代,可以再迭代期间移除元素。

Collection接口继承了Iterable,是集合通用的接口,但是只封装了只读的方法。

MutableCollection<E>接口继承了Iterable和Collection,封装了添加和移出的方法。

只是这样说还是云里雾里分不清,我们往下看,具体到代码:

list:

List是以线性方式管理物件集合,其可以很快的在任何地方进行增加和删除元素。List<E>接口继承Collection<E>接口,集合中可以存放重复对象。我们以代码的形式对其新建和函数进行使用说明:

val list= listOf<String>(      //新建list
        "瓦洛兰","德玛西亚","班德尔城","诺克萨斯","祖安","皮尔特沃夫","艾欧尼亚","李青","阿利斯塔","希维尔","潘森","伊泽瑞尔","雷克顿","古拉加斯","奥利安娜","崔斯塔娜","泰达米尔","马尔扎哈","卡西奥佩娅","艾尼维亚"
)
   

listOf()是Kotlin提供的创建list的函数,还有其他函数如:

具体对应了不同类型的集合的创建方式,就不一一列举了。针对list本身的一些操作函数如:

val count=list.size     //集合中元素的数量  Int
val isNull=list.isEmpty()   //判断集合是否为空  Boolean
val isContains=list.contains("李青")  //判断集合中是否包含某种元素     Boolean
val list2= listOf<String>("瓦洛兰","德玛西亚","班德尔城","诺克萨斯","祖安"
)
val isContainsAll=list.containsAll(list2)   //判断集合中是否包含另一个集合    Boolean
val indexStr=list.get(2)    //查询集合中某个位置的元素值 <E>
val index=list.indexOf("李青")    //返回集合中某个元素首次出现的索引,如果不存在则返回-1 Int
val lastIndex=list.lastIndexOf("李青")    //返回集合中某个元素最后出现的索引,如果不存在则返回-1   Int

val iterator=list.iterator()    //返回该只读集合的元素迭代器     Iterator
val listIterator=list.listIterator()    //返回一个集合的迭代器    ListIterator
val listIteratorIndex=list.listIterator(2)  //从指定位置开始,返回一个集合的迭代器    ListIterator
val subList=list.subList(1,9)   //返回集合中从19之间的集合    List

大家应该注意到,这些函数和方法都是只读的操作,并没有对list进行修改。list在Kotlin中也就是一个只读的集合,如果想对其进行修改,我们应该使用MutableList(这些只读的方法和函数是通用的),具体如下:

val mutableList= mutableListOf<String>("伊泽瑞尔","雷克顿","古拉加斯","奥利安娜","崔斯塔娜","泰达米尔","马尔扎哈","卡西奥佩娅","艾尼维亚"
)
val isAddOk=mutableList.add("祖安")     //添加一个元素,返回truefalse   Boolean
val isAddIndexOk=mutableList.add(2,"班德尔城")  //在指定位置添加一个元素   Unit
val isRemoveOk=mutableList.remove("李青")    //移除集合中的一个元素,返回truefalse    Boolean
val isRemoveAtOk=mutableList.removeAt(3)    //移除指定为位置的元素    <E>
val isAddAllOk=mutableList.addAll(list2)   //添加另一个集合,返回truefalse       Boolean
val isRemoveAllOk=mutableList.removeAll(list2)  //移除一个集合,返回truefalse   Boolean
val isSetOk=mutableList.set(2,"诺克萨斯")   //替换指定位置的元素,返回原元素   <E>
val isClearOk=mutableList.clear()   //清空集合中得元素 Unit
val list4=mutableList.toList()  //tolist是一个扩展函数,可以赋值list内的内容,返回一个只读的list

Map:

Map是一个存放键和值的集合,每一个元素都包含键和值。Kotlin中Map和list一样,也分为只读和可变两种Map。

创建Map时需要调用mapOf(),mutableMapOf():

val map= mapOf<Int,String>(1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔"
)
val hashMap= hashMapOf<Int,String>(1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔"
)

map和hashMap的区别,这里就不说了,Java的基础,实在不知道的自行度娘咯。

val count=map.size  //获取元素数量
val keys=map.keys   //返回mapkey的集合
keys.forEach(::print)   //输出Log1,2,3,4
val values=map.values    //返回mapkey的集合
values.forEach(::print)     //输出Log:伊泽瑞尔,雷克顿,古拉加斯,泰达米尔
val entry=map.entries   //返回键/值对集合
entry.forEach{
    println("key: ${it.key} , value: ${it.value}")
}       //输出key:1 , value:伊泽瑞尔  key:2...

val isEmpty=map.isEmpty()   //判断集合是否为空 Boolean
val isContainsKey=map.containsKey(3)    //判断集合中是否包含某个key
val isContainsValue=map.containsValue("雷克顿")    //判断集合中是否包含某个value
val valueStr=map.get(2) //获取指定key的元素值,没有则返回null

上面说了map和list一样是只读的,可变的map需要使用mutableMap:

var mutableMapOf= mutableMapOf<Int,String>()
mutableMapOf.putAll(map)    //添加整个map
mutableMapOf.put(5,"拉克丝")   //添加指定keyvalue
mutableMapOf.remove(2)  //移除元素
mutableMapOf.clear()    //清空集合

很多情况下,函数和方法的名字和list的都是一样的。

set:

set集合中的元素是不会有重复的,并且是乱序的。创建set需要使用setOf(),mutableSetOf():

val set= setOf<String>("祖安","皮尔特沃夫"
)
val mutableSet= mutableSetOf<String>("阿利斯塔","希维尔"
)

set的只读和修改方法和list及map都是一样的,大家可参考上面的内容,自行进行实验。(就让我偷个小懒吧

Kotlin中的集合就简单介绍到这里,具体的和Java中集合的对比,可以自行研究下,今天介绍的这些已经能够满足大部分开发需求了。

Kotlin学习记录(五)—— 条件表达式的使用

Kotlin学习记录(四)—— 常用集合的使用相关推荐

  1. Kotlin学习笔记四、集合set-容器list-映射map相关

    一.概述. Kotlin中的容器分三类,分别是集合Set.队列List.映射Map,跟Java的集合set.list.map一一对应.但是kotlin里面的容器又分为只读和可变两种类型.区别在于该容器 ...

  2. Kotlin学习记录(三)—— 子线程获取数据,实现简单ListView

    接上篇:Kotlin的变量.属性.类.构造函数.继承.方法 上一篇简单介绍了Kotlin的一些基础构成,当然还有像对象声明.操作符等等都未涉及到,这些会在以后用到的过程中进行详细说明. 项目中List ...

  3. MySQL学习记录 (四) ----- SQL数据管理语句(DML)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  4. Kafka学习记录(四)——消费者

    Kafka学习记录(四)--消费者 目录 Kafka学习记录(四)--消费者 对应课程 Kafka消费者工作流程 消费方式和流程 消费者组原理 消费者组初始化流程 消费者组详细消费流程 重要参数 ka ...

  5. leveldb 学习记录(四)Log文件

    前文记录 leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice leveldb 学习记录(三) MemTable 与 Immutable Memtable le ...

  6. PostgreSQL学习手册(四) 常用数据类型

    一.数值类型:     下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer ...

  7. Day17(集合)学习记录(HashSet集合 HashMap集合)

    大纲: Day17(集合)学习目标 [学习目标]理解.了解.应用.记忆 通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度) [应用]HashSet集合 [应用]能够独立阐述Set体系的 ...

  8. python3.10官方文档学习记录四__赋值、比较运算

    1 先来个例子: Python 还可以完成比二加二更复杂的任务. 例如,可以编写 斐波那契数列 的初始子序列,如下所示: >>> # 斐波那契级数: ... # 两个元素的和定义了下 ...

  9. 《你好,放大器》----学习记录(四)

    4 使用放大器的共性问题 4.1 放大器的封装 选择运放的封装,对整体电路板尺寸.焊接工艺和散热有影响,对电路性能也有影响 4.1.1 关于封装的一些基本概念 关于封装,主要关心两个参数: 管脚间距 ...

最新文章

  1. 计算机网络谢希仁第七版课后答案第三章 数据链路层
  2. optee的Share Memory介绍
  3. PHP页面编码声明与用header或meta实现PHP页面编码的区别
  4. 大话数据结构—栈与队列
  5. 设置MYSQL数据库编码为UTF-8
  6. MongoDB缓存技术总结
  7. python数据框的横向贾总_[Spark][Python]DataFrame的左右连接例子
  8. Django实战1-权限管理功能实现-10:用户管理
  9. linux7.2 网卡设置,CentOS 7.2网络配置
  10. 【jmeter安装】jmeter下载安装超详细简单步骤
  11. Easy3D 样条曲线拟合
  12. [沈航软工教学] 学生项目Coding地址汇总
  13. 【Python爬虫历程】使用Cookie来模拟登陆
  14. 精灵商场项目(二)--Github+EasyUI+商品列表
  15. 13.大容量存储结构(磁盘管理)
  16. ftp上传工具,八款最佳的ftp上传下载工具,支持中文(ftp客户端分享)
  17. 这么清晰的帮助手册,AppCube 二次体验
  18. debug信息的认识
  19. 查找数组元素最大值和最小值(分治法)
  20. python 中dtype 为object_DataFrame中的字符串,但dtype是对象

热门文章

  1. Tibero与Oracle的优劣
  2. 年终盘点:2019年,产业互联网9大趋势关键词
  3. 计算机照片隐藏,电脑删除的照片怎么恢复?照片最隐藏的功能
  4. 正则表达式:匹配性别男女
  5. 计算机网络中的广播啥意思,开启无线广播啥意思
  6. Android 修改屏幕密度(开发者选项中的最小宽度)
  7. vivo X6Plus系统优化
  8. Unity查安卓Native Crash的方法,定位SO报错函数
  9. VMware16NAT模式配置固定IP
  10. 零基础AI商业插画全能班教程