kotlin中的集合

Kotlin中的集合分为两派:可变集合不可变集合

  • 列表:List/MutableList;
  • 集:Set/MutableSet;
  • 映射:Map/MutableMap;
  • 集:Collection/MutableCollection;
  • 迭代器:Iterable/MutableIterable;

所谓可变就是支持读、写、删,不可变只支持读

我们从下面详细对比中可以发现:

public interface Collection<out E> : Iterable<E>{...}

public interface MutableCollection<E> : Collection<E>, MutableIterable<E>{...}

public interface List<out E> : Collection<E> {...}

public interface MutableList<E> : List<E>, MutableCollection<E> {...}

public interface Set<out E> : Collection<E> {...}

public interface MutableSet<E> : Set<E>, MutableCollection<E>{...}

public interface Map<K, out V>{...}

public interface MutableMap<K, V> : Map<K, V> {...}

如何创建集合

List

val emptyList = emptyList<String>() //创建空的List
val list = listOf<String>("132", "321", "liming") //创建普通的List
val mutList = mutableListOf<Int>(652, 123, 4564) //创建可修改的List

set

val emptySet = emptySet<String>() //创建空的Set
val set = setOf<String>("123", "3212", "sadsa") //创建一个普通的Set
val mutSet = mutableSetOf<Int>(123, 21, 852) //创建一个可变的Set
val hashSet = hashSetOf<Int>(123, 21, 852) //创建一个可变HashSet
val linkedSet = linkedSetOf<Int>(123, 21, 852) //创建一个LinkedHashSet
val sortedSet = sortedSetOf<Int>(123, 21, 852) //创建一个SortedSet

map

val emptyMap = emptyMap<Int, String>() //创建一个空的<Integer,String>的Map
val map = mapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个普通的map
val mutMap = mutableMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个可变的map
val hashMap = hashMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个hashMap
val linkedMap = linkedMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个linkedMap
val sortedMap = sortedMapOf<Int, String>(1 to "haha", 2 to "lala") //创建一个sortedMap

to并不是一个特殊的结果,而是一个普通的函数

kotlin中的集合与Java中集合的关系

接下来让我们看一下创建的对象类型:

println(list.javaClass) //class java.util.Arrays$ArrayList
println(set.javaClass) //class java.util.LinkedHashSet
println(map.javaClass) //class java.util.LinkedHashMap

如你所见,Kotlin并没有采用自己的集合类,而是采用标准的java集合类,这对java开发者来说是个好消息。

为什么Kotlin没有自己专门的集合类呢?

答: 因为使用标准的java集合类可以更好的和java交互。kotlin与java互调不用考虑集合类的转换。

尽管如此Kotlin并没有止步,而是在此基础上增加了很多方法,如:
获取列表中的最后一个元素,或者得到一个数字列表的最大值:

val strings = listOf<String>("first","second","third","last")
println(strings.last()) //输出 lastval numbers = setOf(1,11,-10,25,3,2)
println(numbers.max())  //输出 25
println(numbers.min())  //输出 -10

更多骚操作请关注后续文章。

Kotlin实战【六】Kotlin中集合的创建相关推荐

  1. Kotlin实战指南一:集合

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/87781732 本文出自[赵彦军的博客] Kotlin初体验一:集合 集合 一.l ...

  2. python中集合的使用

    python中集合的使用 在python中对集合的操作主要包括:集合的创建.集合中数据的添加.集合中数据的删除.集合中数据的查找. 1.集合的创建 在python中集合的创建方法有直接创建和使用关键字 ...

  3. Kotlin 设计模式及实战 (持续更新中......)

    Kotlin 设计模式及实战 "每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动". Christo ...

  4. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

  5. Kotlin实战指南二十:flow

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117370700 本文出自[赵彦军的博客] 文章目录 往期精彩文章 flow 是啥 ...

  6. Kotlin实战指南十九:use 函数魔法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117366756 本文出自[赵彦军的博客] 文章目录 往期精彩文章 use函数 往期 ...

  7. Kotlin实战指南十八:open、internal 关键字使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712 本文出自[赵彦军的博客] 文章目录 往期精彩文章 open关键字 ...

  8. Kotlin实战案例:实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表)

    n实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果) 随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Ko ...

  9. Kotlin实战(三)

    一.元组 1.1.二元元组 data class Pair<out A, out B>(public val first: A,public val second: B ) : Seria ...

  10. Kotlin实战指南十七:JvmField、JvmStatic使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/116668666 本文出自[赵彦军的博客] 文章目录 往期精彩文章 @JvmFiel ...

最新文章

  1. centos安装JDK与Tomcat
  2. 线上使用zabbix报警脚本(含图片)
  3. 给定入栈序列,判断一个串是否为出栈序列
  4. Laravel 查询某天数据 whereDate
  5. 【数据挖掘实例】构建Xgboost模型,在电力用户的95598工单数据中的电费敏感用户预测(高敏用户模型)
  6. Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息
  7. 如何知道远程电脑某一端口是否打开?
  8. 远程桌面退出全屏/不能全屏/全屏切换的技巧
  9. ocx可以被Java调用么_java调用ocx
  10. Angular core.js executeTemplate
  11. ubuntu11.04下配置中文输入法
  12. java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)
  13. 关于getResource(/)的读取路径问题
  14. Python3安装cx_Oracle连接oracle数据库实操总结
  15. 【C++】:动态库与静态库区别
  16. 计算机键盘中英文,苹果电脑键盘上的【⌘】键用英文怎么表达?和露营地又有什么关系...
  17. VBV大小-H.264
  18. CF855G. Harry Vs Voldemort(边双,并查集,dp)
  19. Linux中的su 和su -
  20. python分词考研英语真题词频(附结果)——读取word、nltk、有道智云API

热门文章

  1. EChart:EChart与NProgress结合异步加载数据
  2. PS使用:利用PS制作旋转水晶球gif图
  3. Python:程序生成Windows可执行文件/不显示命令执行窗口/无法生成exe报错TypeError: an integer is required (got type bytes)解决方法
  4. python语言基础实验一_实验1 Python语言基础
  5. 行业动态_天才、忽悠与炮灰
  6. status函数(自学数据结构第一天)
  7. 女神节福利来了!(自动驾驶/三维重建/SLAM/点云/标定/深度估计/3D检测)
  8. 疫情严峻!有高校不放寒假,直接开始新学期!还有高校紧急放假,停止考试直接回家...
  9. LeetCode之反转字符串中的单词
  10. 前端js实现打印excel表格