Kotlin集合简介

Android2024年9月5日 pm5:26发布5天前更新 91es.com站长
34 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、 本站内容: 部分来源于网络,仅供站长学习和参考,若侵权请留言
4、 本站打赏: 打赏站长一杯冰可乐 打赏站长一杯冰可乐

暂无评论

暂无评论...

随机推荐

席慕容:发出声音永远是有用的

有一年,我应邀到一所中学演讲。中国北方的农村,露天操场,围坐着几千名学生,他们穿着翠蓝色校服,脸蛋呈现出一种深紫的玫瑰红色。冬天,很冷。 我从不曾...

许知远:窥探者的狂欢节

温斯顿要与一位美丽的姑娘相会,为此,他们必须坐上火车,到一个荒无人烟的野外,这里应该没有监视器,他和那姑娘可以有节制地表露自己的爱意和激情。他们每...

[摘]Android对Bitmap缩放图片的记录

前言 在Android项目中经常需要调整图片的尺寸大小以适应存储、传输和图片处理等需求。虽然Android API中提供了一些缩放图片的方法,在调试中发现,使用Androi...

动态代理Proxy.newProxyInstance

前言 记录一下Java中的动态代理相关知识,主要是为了Android中Hook技术要用,因此记录一下,方便自己查阅。 正文 什么是动态代理 利用Java的反射技术,在运...

何其芳:脚步

你的脚步常低响在我的记忆中, 在我深思的心上踏起甜蜜的凄动。 有如虚阁悬琴, 久失去了亲切的手指, 黄昏风过, 弦弦犹颤着昔日的声息; 又如白杨的落叶飘...