Kotlin集合类

集合类的基本概念

曾经读过这样一段有趣的话,大致内容如下:
世间本无集合(只有数组)
但有人想要,于是就用数组创造了结合类
有人想要可以自动扩展容量的数组,于是有了List
有人想要元素不重复的数组,于是有了Set
有人想要有序的数组,于是有了TreeSet,TreeList
有人想要通过复杂对象(而不仅仅是简单的下表)来查找另一个对象的关联数组,于是有了Map.
是的,几乎所有集合都是基于数组来实现的。所以,数组比集合要快。但是集合是对数组的高层次抽象封装,集合的功能自然就比数组的功能要多得多。例如,数组是一种可读/可写数据结构,而使用集合提供的ReadOnly方法,我们就能够以只读方式来使用集合。

1. 集合类是一种数据结构

在讲Kotlin的集合类之前,为了更加深刻理解为什么要有集合类,以及集合类到底是怎么一回事,让我们先来简单回顾一下编程的本质:
数据结构+算法(信息的逻辑结构及其基本操作)
算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。通常情况下,设计良好的数据结构可以大大简化算法的实现和复杂度,同时可以提升存储效率。数据结构往往同高效的检索算法和索引技术相关(集合类中本质就是这些东西)。

2. 集合类是ADT

我们知道类的本质就是对象及其关系的抽象(abstraction),一个累通常有属性(数据结构)和行为(算法)。

3. 连续存储和离散存储

我们现在很少用抽象数据类型(Abstract Data Type,ADT)这个概念,其实这个概念是OO范式的前身,也是类的前身。使用ADT可以让我们更加简单地描述现实世界。例如:用线性表描述学生成绩表,用树或图描述遗传关系等。
ADT加上继承,重载合多态性就是现代OOP编程范式中的类的概念了。我们简称为广义ADT的概念
如果我们更加管故意的来理解这里的ADT思想,其实各种编程语言的SDK. API,所有的服务(laaS,paaS和SaaS等)都是一种更加广义的ADT

Kotlin集合类简介

1.列表(list)

列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头合一个结尾,当然,它与根本没有顺序的集是不同的。列表在数据结构中可表现为:数组合向量,链表,堆栈,队列等

2.集(set)

集是最简单的一种集合,它的对象不按特定方式排序,只是简单地把对象加入集合中,就像忘口袋中放东西。
对集中成员对访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象
集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序

3.映射(map)

映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在影射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。
关键字本身并不能决定对象的存储位置,它需要散列技术来处理,产生一个被称作散列码(hash code) 的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定 “关键字/对象“对的存储位置。理想情况下,散列处理应该产生给范围内均匀分布的值,而且每个关键字应得到不同的散列码。

List

List接口继承于Collection接口,元素以线性方式存储,集合中可以存放重复对象。Kotlin的List分为: 不可变集合类List(ReadOnly,Immutable)和可变集合类MutableList(Read&Write,Mutable)
List类图结构如图所示:
在这里插入图片描述
其中,Iterator是所有容器类Collection的迭代器。迭代器(Iterator)模式又叫做游标(Cursor)模式。迭代器的定义为:提供一种方法访问一个容器对象中各个元素,而又不需暴露对象的内部细节。从定义可见,迭代器模式是为容器而生的。

1. 创建不可变List

2. 创建可变集合MutableList

3. 遍历List元素

4. List元素操作函数

5. List集合类的基本运算函数

6. 过滤操作函数

7. 映射操作函数

8. 分组操作函数

9. 排序操作符

10. 生产操作符

Set

Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值