網站首頁 編程語言 正文
前言
容器是用于存放數據的載體。容器分為數組、集合。 Kotlin 作為一門全新的語言,肯定還是要有自己的容器類,不然哪天 Java 跟 Kotlin 劃清界限,那麻煩就大了。 Kotlin 也擁有三類基本的容器,分別是集合 Set、隊列 List、映射 Map,每種 容器又分作只讀與可變兩種類型這是為了判斷該容器能否進行增刪改等變更操作。
? Kotlin 數組
? Kotlin 集合
一、Kotlin數組
數組是一種初始化時指定容器大小,不可以動態調整其大小的容器。元素按 順序存儲在一串連續的內存段上。
1、Kotlin數組創建技巧
arrayOf 創建數組
創建一個數組并傳遞元素值給它, 集合中的元素可以是任意類型
val array = arrayOf(1, 2, 3)
val array = arrayOf(1, true, "2", JSONObject()) // 集合中的元素可以是任意
類型
arrayOfNulls 創建數組
創建一個指定大小的、所有元素都為空的數組,但必須指定集合中的元素類型
val arrayOfNulls = arrayOfNulls<String>(5) //創建一個指定大小的、所有元素
都為空的數
動態創建數組
用接受數組大小以及一個方法參數的 Array 構造方法,用作參數的方法能夠 返回給定索引的每個元素初始值:
// 創建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }
2、原生類型數組
在 Kotlin 中也有無裝箱開銷的專門的類來表示原生類型數組:
IntArray 函數
// 1.創建并初始化一個 IntArray [1, 2, 3, 4, 5]
val intArray = IntArray(1, 2, 3, 4, 5)
// 2.創建一個長度為 5 的空的 IntArray
val intArray2 = IntArray(5)
// 3.創建一個長度為 5 的值全為 100 的 IntArray [100, 100, 100, 100, 100]
val intArr2 = IntArray(5) { 100 }
// 4.注意這里 it 是它索引下標值,所以這是創建一個長度為 5 的 IntArray [0, 2, 4,
6, 8]
val intArr3 = IntArray(5) { it * 2
Tips
在 Kotlin 數組類型不是集合中的一種,但是它又和集合有著太多相似的地 方。 數組和集合可以互換初始化集合的時候可以傳入一個數組
3、數組常見的操作
獲取元素
val array =arrayOf(1,2,3,4,5)
array[index] // 獲取數組的第 index 個元素,下標從 0 開始
array.component1() … arr.component5()獲取數組的前 5 個元素。同樣適用于集合
for 循環——元素遍歷
for (item in array) { // 元素遍歷
println(item)
//1
//2
//3
//4
//5
}
for 循環——下標遍歷
for (i in array.indices) { // 根據下標再取出對應位置的元素
println(i.toString() + "->" + array[i])=
//0->1
//1->2,
//2->3,
//3->4,
//4->5
}
forEach 遍歷數組
array.forEach {
println(it)
//1
//2
//3
//4
//
}
forEach 增強版
array.forEachIndexed { index, item ->
println("$index:$item")
//0:1
//1:2
//2:3
//3:4
//4:5
}
數組翻轉
array.reverse()
>> println(array) = 5,4,3,2,1
二、Kotlin集合
Kotlin 標準庫提供了一整套用于管理集合的工具,集合是可變數量(可能為 零)的一組條目,各種集合對于解決問題都具有重要意義,并且經常用到。 與數組不同的是可變集合的大小可以動態改變。
? List: 是一個有序集合,可通過索引(反映元素位置的整數)訪問元 素。元素可以在 list 中出現多次。列表的一個示例是一句話:有一組 字、這些字的順序很重要并且字可以重復。
? Set: 是唯一元素的集合。它反映了集合(set)的數學抽象:一組無重 復的對象。一般來說 set 中元素的順序并不重要。例如,字母表是字 母的集合(set)。
? Map:(或者字典)是一組鍵值對。鍵是唯一的,每個鍵都剛好映射到 一個值,值可以重復。
1、集合創建的技巧
集合分為
可變集合,顯而易見,是指集合創建完成之后,可以對集合進行增 刪改查操作
不可變集合,顯而易見,是指指集合創建完成之后,不能對集合進行增刪改 查操作,會拋異常。
List 隊列
隊列是一種元素之間按照順序排列的容器,它與集合的最大區別,便是多了 個次序管理。不要小看這個有序性,正因為隊列建立了秩序規則,所以它比 集合多提供了如下功能(注意凡是涉及到增刪改的,都必須由 MutableList 來 完成):
? 不可變集合
val strings = listOf("one", "two", "one") // 不可以對 strings 進行增刪改查操作
? 可變集合
val numbers = mutableListOf<Int>(1, 2, 3, 4) // 可以對 numbers 進行增刪改查
操作
val numbers = arrayListOf<Int>(1, 2, 3
Tips
不難發現,每個不可變集合都有對應的可變集合,也就是以 mutable 為前綴 的集合。
? 不可變的 List 類型集合的初始化使用:listOf 函數
? 可變的 List 類型集合的初始化使用:mutableListOf 函數
Set 集合
1、容器內部的元素不按順序排列,因此無法按照下標進行訪問;
2、容器內部的元素存在唯一性,通過哈希值校驗是否存在相同的元素,如果 存在則覆蓋之;
? 不可變集合
val hello = setOf("H", "e", "l", "l", "o")//自動過濾重復元素
>> println(hello) = H", "e", "l","w", "o"
? 可變集合
val hello = mutableSetOf("H", "e", "l", "l", "o") //自動過濾掉重復元素
>> println(hello) = H", "e", "l","w", "o", "r", "l", "d
Tips
? 不可變的 set 類型集合的初始化使用:setOf 函數
? 可變的 set 類型集合的初始化使用:mutableSetOf 函數
Map 字典
映射內部保存的是一組鍵值對(Key-Value),也就是說,每個元素都由兩部 分構成,第一部分是元素的鍵,相當于元素的名字;第二部分是元素的值, 存放著元素的詳細信息。元素的鍵與值是一一對應的關系,相同的鍵名指向 的值對象是唯一的,所以映射中每個元素的鍵名各不相同,這個特性使得映射的變更操作與隊列存在以下不同之處(注意增刪操作必須由 MutableMap 來完成):
? 不可變集合
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to
1)
>> println("${numbersMap.keys}")= key1,key2,key3,key4
>> println("${numbersMap.values}") = 1,2,3,1
? 可變集合
val numbersMap = mutableMapOf("key1" to 1, "key2" to 2, "key3" to 3,
"key4" to 1)
>> println("${numbersMap.keys}")= key1,key2,key3,key4
>> println("${numbersMap.values}") = 1,2,3,1
Tips
? 不可變的 map 類型集合的初始化使用:mapOf 函數
? 可變的 map 類型集合的初始化使用:mutableMapOf 函數
2、集合的操作
增刪改查
val stringList = listOf("one", "two", "one") 以 list 集合為例,set,map 同樣
具備以下能力
numbers.add(5) // 集合最后面添加元素 5
numbers.addAt(1,5) // 向下標為 1 的位置,添加元素 5,下標為 1 及之后位置的
元素,以此后移
numbers.remove("one") // 刪除元素“one”
numbers.removeAt(1) // 刪除下標為 1 的元素
numbers.set(0) = 0 // 下標為 0 的元素設置為 0
numbers.get(0)==>1 // 獲取下標為 0 的元素,結果為
變換操作
在 Kotlin 中提供了強大對的集合排序的 API,讓我們一起來學習一下:
原文鏈接:https://blog.csdn.net/m0_58941767/article/details/126785386
相關推薦
- 2022-07-08 python?csv實時一條一條插入且表頭不重復問題_python
- 2022-02-21 小程序頁面跳轉如何同時傳多個參數?
- 2022-09-20 redis的string類型及bitmap介紹_Redis
- 2022-06-06 基于VSTS的Xamarin.Android持續集成步驟詳解_Android
- 2022-06-01 C++構造函數的類型,淺拷貝與深拷貝詳解_C 語言
- 2022-10-19 react實現動態選擇框_React
- 2022-04-20 python錯誤提示:Errno?2]?No?such?file?or?directory的解決方法
- 2022-12-03 設置界面開發Preference?Library數據重建機制詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支