Kotlin集合简介

Android2024年9月5日 pm5:26发布2周前更新 91es.com站长
45 0 0
目录

前言

简单记录一下Kotlin集合的使用以及如何遍历ListSetMap,记录于此,方便自己查阅。

正文

集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map。

Collection

Collection是所有单列集合的父接口,List和Set是其子类。

  1. List的特点是元素有序、元素可重复。

  2. Set的特点是元素无序并且不可重复。

List

List分为可变集合MutableList(Read&Write,Mutable)和不可变集合List(ReadOnly,Immutable)。其中可变集合MutableList可以对集合中的元素进行增加和删除的操作,不可变集合List对集合中的元素仅提供只读操作。

  1. 元素有序

  2. 元素可重复

不可变List

不可变List是一个只读操作的集合,只有size属性和get()函数。

var listInt1 = listOf<Int>()
var listInt2 = listOf(1, 2, 3)
var listInt3 = listOfNotNull(1,2,3)

打印后结果,分别如下:

[]
[11, 22, 33]
[11, 22, 33]

下面列举一下遍历的方式。

  1. 方式1

//方式1 
var listInt = listOfNotNull(7, 1, 9, 0, 10)
var intIterator = listInt.listIterator()
while (intIterator.hasNext()) {
    Log.d(TAG, "listInt [" + intIterator.nextIndex() + "]: " + intIterator.next())
}

结果

listInt [0]: 7
listInt [1]: 1
listInt [2]: 9
listInt [3]: 0
listInt [4]: 10
  1. 方式2

//方式2
var listInt = listOfNotNull(7, 1, 9, 0, 10)
for( item in listInt){
    Log.d(TAG, "listInt : $item")
}
  1. 方式3

//方式3
var listInt = listOfNotNull(7, 1, 9, 0, 10)
listInt.forEach {
    Log.d(TAG, "listInt : $it")
}
  1. 方式4

//方式4
var listInt = listOfNotNull(7, 1, 9, 0, 10)
for( index in listInt.indices){
    Log.d(TAG, "listInt:  "+ listInt.get(index))
}
  1. 方式5

var listInt = listOfNotNull(7, 1, 9, 0, 10)
for((index,item) in listInt.withIndex()){
    Log.d(TAG, "listInt[$index]: $item ")
}
  1. 方式6

var listInt = listOfNotNull(7, 1, 9, 0, 10)
var array = listInt.toIntArray()
for (item in array) {
    Log.d(TAG, "listInt :$item ")
}
MutableList

MutableList是List集合中的可变集合,MutableList<E>接口继承于List<E>接口和Mutable Collection<E>接口,增加了对集合中元素的添加及删除的操作。

新增功能

  1. 删除

  2. 添加

var listInt1 = mutableListOf<Int>()
var listInt2 = mutableListOf(10, 12, 0);

打印后结果,分别如下:

test :[] 
test :[10, 12, 0]

遍历方式一样,略过。

Set

Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致。

  1. 元素无序

  2. 元素不重复

不可变Set
var set = setOf(0, 1,0,2,3,4)
var set1 = setOfNotNull(0, 1,0,2,3,4)

输出

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]

下面列举一下遍历的方式。

  1. 方式1

var set = setOf(0, 1,0,2,3,4)
var iterator = set.iterator()
while (iterator.hasNext()) {
    Log.d(TAG, "set : "+ iterator.next())
}
  1. 方式2

var set = setOf(0, 1,0,2,3,4)
for( item in set){
    Log.d(TAG, "set : $item")
}
  1. 方式3

var set = setOf(0, 1, 0, 2, 3, 4)
set.forEach() {
    Log.d(TAG, "set : $it ")
}
  1. 方式4

var set = setOf(0, 1, 0, 2, 3, 4)
var array = set.toIntArray()
for (item in array) {
    Log.d(TAG, "set : $item ")
}
  1. 方式5

var set = setOf(0, 1,0,2,3,4)
for((index,item) in set.withIndex()){
    Log.d(TAG, "set[$index]: $item ")
}
MutableSet

MutableSet接口继承于Set接口与MutableCollection接口,同时对Set接口进行扩展,在该接口中添加了对集合中元素的添加和删除等操作。

新增功能

  1. 添加

  2. 删除

可变MutableSet集合是使用mutableSetOf()函数来创建对象的

var mutableSet = mutableSetOf(2, 1, 5, 0, 3)
Log.d(TAG, "mutableSet 1 : $mutableSet")
mutableSet.add(0)
Log.d(TAG, "mutableSet 2 : $mutableSet")
mutableSet.add(10)
Log.d(TAG, "mutableSet 3 : $mutableSet")
mutableSet 1 : [2, 1, 5, 0, 3]
mutableSet 2 : [2, 1, 5, 0, 3]
mutableSet 3 : [2, 1, 5, 0, 3, 10]

不可添加重复元素。

Map

Map是双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的Value。

Map集合中的元素是无序可重复的,Map集合分为不可变集合Map和可变集合MutableMap两种,其中可变集合MutableMap可以对集合中的元素进行增加和删除的操作,不可变集合Map对集合中的元素仅提供只读操作。

  1. 元素无序

  2. 元素可重复

不可变Map
var map = mapOf(1 to 111, 2 to 222, 3 to 333)
var map1 = mapOf(1 to "百度", 2 to "谷歌", 3 to "必应")

打印

{1=111, 2=222, 3=333} 
{1=百度, 2=谷歌, 3=必应}

下面列举一下遍历的方式。

  1. 方式1

 var map = mapOf(1 to "百度", 2 to "谷歌", 3 to "必应")
 map.forEach() {
     Log.d(TAG, "test : {${it.key}} to {${it.value}}")
 }
  1. 方式2

var map = mapOf(1 to "百度", 2 to "谷歌", 3 to "必应")
var iterator = map.iterator()
while (iterator.hasNext()) {
    val entry: Map.Entry<Int, String> = iterator.next()
    Log.d(TAG, "test : ${entry.key} to ${entry.value}")
}
  1. 方式3

var map = mapOf(1 to "百度", 2 to "谷歌", 3 to "必应")
for( item in map){
    Log.d(TAG, "test: ${item.key} to ${item.value}")
}
MutableMap

可变MutableMap集合是使用mutableMapOf ()函数来创建的.

新增功能

  1. 删除

  2. 添加

var mutableMap = mutableMapOf(1 to "百度", 2 to "谷歌", 3 to "必应")

遍历跟不可变map一样。

参考文章

 历史上的今天

  1. 2023: Unable to make field(0条评论)
  2. 2022: C语言中的类型定义符typedef简单介绍(0条评论)
  3. 2022: Visual Studio 2017常用部分快捷键(0条评论)
  4. 2020: 徐志摩:认识你真好(0条评论)
  5. 2020: 关于插入部分无线鼠标Android应用重启问题(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com[备用域名]
3、 本站内容: 部分来源于网络,仅供站长学习和参考,若侵权请留言

暂无评论

暂无评论...

随机推荐

ProgressBar不显示和不旋转

前言ProgressBar在xml中配置IndeterminateDrawable是可以的,但是如果换肤或者通过Java代码改变IndeterminateDrawable的资源就出现ProgressBar被影藏和不旋转问题。好记性不如烂笔头正文上面有两个问题:ProgressBar被影...

内存分析工具MAT简单记录

前言MAT(Memory Analyzer Tool,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,...

张枣:镜中

只要想起一生中后悔的事梅花便落了下来 比如看她游泳到河的另一岸比如登上一株松木梯子危险的事固然美丽 不如看她骑马归来面颊温暖羞涩。低下头,回答着皇帝 一面镜子永远等候她让她坐到镜中常坐的地方望着窗外,只要想起一生中后悔的事梅花便落满了南山

[代码片段]SoundPool的使用

前言之前也整理过SoundPool的使用,但由于没有附上代码,这里就重新整理一下。好记性不如烂笔头正文参数和使用方式就不细写了,简单说一下SoundPool.play()方法public final int play(int soundID, // soundID通过...

刘大白:心上的写真

从低吟里,短歌离了她底两唇,飞行到我底耳际。但耳际不曾休止,毕竟颤动了我底心弦。从瞥见里,微笑辞了她底双唇,飞行到我底眼底。但眼底不曾停留,毕竟闪动了我底心镜。心弦上短歌之声底写真,常常从掩耳时复奏了;心境上微笑之影底写真,常常从合眼时重现了。1922

Web网站置灰的几种方式代码

前言众所周知,一般有大事情,很多官方网站的首页就会置灰。对这个比较感兴趣,因此就查询了一下,发现设置全站置灰的方式很简单。记录一下,方便自己查阅。PS: 本文内容摘抄的,文末有原作者连接正文置灰涉及全屏置灰,另外一种是首屏置灰。下面记录一下置灰的代码。全屏置灰方式一亲测,有效。...