Kotlin數(shù)據(jù)容器深入講解
前言
容器是用于存放數(shù)據(jù)的載體。容器分為數(shù)組、集合。 Kotlin 作為一門全新的語言,肯定還是要有自己的容器類,不然哪天 Java 跟 Kotlin 劃清界限,那麻煩就大了。 Kotlin 也擁有三類基本的容器,分別是集合 Set、隊列 List、映射 Map,每種 容器又分作只讀與可變兩種類型這是為了判斷該容器能否進行增刪改等變更操作。
• Kotlin 數(shù)組
• Kotlin 集合
一、Kotlin數(shù)組
數(shù)組是一種初始化時指定容器大小,不可以動態(tài)調(diào)整其大小的容器。元素按 順序存儲在一串連續(xù)的內(nèi)存段上。
1、Kotlin數(shù)組創(chuàng)建技巧
arrayOf 創(chuàng)建數(shù)組
創(chuàng)建一個數(shù)組并傳遞元素值給它, 集合中的元素可以是任意類型
val array = arrayOf(1, 2, 3) val array = arrayOf(1, true, "2", JSONObject()) // 集合中的元素可以是任意 類型
arrayOfNulls 創(chuàng)建數(shù)組
創(chuàng)建一個指定大小的、所有元素都為空的數(shù)組,但必須指定集合中的元素類型
val arrayOfNulls = arrayOfNulls<String>(5) //創(chuàng)建一個指定大小的、所有元素 都為空的數(shù)
動態(tài)創(chuàng)建數(shù)組
用接受數(shù)組大小以及一個方法參數(shù)的 Array 構(gòu)造方法,用作參數(shù)的方法能夠 返回給定索引的每個元素初始值:
// 創(chuàng)建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"] val asc = Array(5) { i -> (i * i).toString() } asc.forEach { println(it) }
2、原生類型數(shù)組
在 Kotlin 中也有無裝箱開銷的專門的類來表示原生類型數(shù)組:
IntArray 函數(shù)
// 1.創(chuàng)建并初始化一個 IntArray [1, 2, 3, 4, 5] val intArray = IntArray(1, 2, 3, 4, 5) // 2.創(chuàng)建一個長度為 5 的空的 IntArray val intArray2 = IntArray(5) // 3.創(chuàng)建一個長度為 5 的值全為 100 的 IntArray [100, 100, 100, 100, 100] val intArr2 = IntArray(5) { 100 } // 4.注意這里 it 是它索引下標值,所以這是創(chuàng)建一個長度為 5 的 IntArray [0, 2, 4, 6, 8] val intArr3 = IntArray(5) { it * 2
Tips
在 Kotlin 數(shù)組類型不是集合中的一種,但是它又和集合有著太多相似的地 方。 數(shù)組和集合可以互換初始化集合的時候可以傳入一個數(shù)組
3、數(shù)組常見的操作
獲取元素
val array =arrayOf(1,2,3,4,5) array[index] // 獲取數(shù)組的第 index 個元素,下標從 0 開始 array.component1() … arr.component5()獲取數(shù)組的前 5 個元素。同樣適用于集合
for 循環(huán)——元素遍歷
for (item in array) { // 元素遍歷 println(item) //1 //2 //3 //4 //5 }
for 循環(huán)——下標遍歷
for (i in array.indices) { // 根據(jù)下標再取出對應(yīng)位置的元素 println(i.toString() + "->" + array[i])= //0->1 //1->2, //2->3, //3->4, //4->5 }
forEach 遍歷數(shù)組
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 }
數(shù)組翻轉(zhuǎn)
array.reverse() >> println(array) = 5,4,3,2,1
二、Kotlin集合
Kotlin 標準庫提供了一整套用于管理集合的工具,集合是可變數(shù)量(可能為 零)的一組條目,各種集合對于解決問題都具有重要意義,并且經(jīng)常用到。 與數(shù)組不同的是可變集合的大小可以動態(tài)改變。
• List: 是一個有序集合,可通過索引(反映元素位置的整數(shù))訪問元 素。元素可以在 list 中出現(xiàn)多次。列表的一個示例是一句話:有一組 字、這些字的順序很重要并且字可以重復(fù)。
• Set: 是唯一元素的集合。它反映了集合(set)的數(shù)學(xué)抽象:一組無重 復(fù)的對象。一般來說 set 中元素的順序并不重要。例如,字母表是字 母的集合(set)。
• Map:(或者字典)是一組鍵值對。鍵是唯一的,每個鍵都剛好映射到 一個值,值可以重復(fù)。
1、集合創(chuàng)建的技巧
集合分為
可變集合,顯而易見,是指集合創(chuàng)建完成之后,可以對集合進行增 刪改查操作
不可變集合,顯而易見,是指指集合創(chuàng)建完成之后,不能對集合進行增刪改 查操作,會拋異常。
List 隊列
隊列是一種元素之間按照順序排列的容器,它與集合的最大區(qū)別,便是多了 個次序管理。不要小看這個有序性,正因為隊列建立了秩序規(guī)則,所以它比 集合多提供了如下功能(注意凡是涉及到增刪改的,都必須由 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
不難發(fā)現(xiàn),每個不可變集合都有對應(yīng)的可變集合,也就是以 mutable 為前綴 的集合。
• 不可變的 List 類型集合的初始化使用:listOf 函數(shù)
• 可變的 List 類型集合的初始化使用:mutableListOf 函數(shù)
Set 集合
1、容器內(nèi)部的元素不按順序排列,因此無法按照下標進行訪問;
2、容器內(nèi)部的元素存在唯一性,通過哈希值校驗是否存在相同的元素,如果 存在則覆蓋之;
• 不可變集合
val hello = setOf("H", "e", "l", "l", "o")//自動過濾重復(fù)元素 >> println(hello) = H", "e", "l","w", "o"
• 可變集合
val hello = mutableSetOf("H", "e", "l", "l", "o") //自動過濾掉重復(fù)元素 >> println(hello) = H", "e", "l","w", "o", "r", "l", "d
Tips
• 不可變的 set 類型集合的初始化使用:setOf 函數(shù)
• 可變的 set 類型集合的初始化使用:mutableSetOf 函數(shù)
Map 字典
映射內(nèi)部保存的是一組鍵值對(Key-Value),也就是說,每個元素都由兩部 分構(gòu)成,第一部分是元素的鍵,相當(dāng)于元素的名字;第二部分是元素的值, 存放著元素的詳細信息。元素的鍵與值是一一對應(yīng)的關(guān)系,相同的鍵名指向 的值對象是唯一的,所以映射中每個元素的鍵名各不相同,這個特性使得映射的變更操作與隊列存在以下不同之處(注意增刪操作必須由 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 函數(shù)
• 可變的 map 類型集合的初始化使用:mutableMapOf 函數(shù)
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 的元素設(shè)置為 0 numbers.get(0)==>1 // 獲取下標為 0 的元素,結(jié)果為
變換操作
在 Kotlin 中提供了強大對的集合排序的 API,讓我們一起來學(xué)習(xí)一下:
到此這篇關(guān)于Kotlin數(shù)據(jù)容器深入講解的文章就介紹到這了,更多相關(guān)Kotlin數(shù)據(jù)容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android打印機--小票打印格式及模板設(shè)置實例代碼
這篇文章主要介紹了Android打印機--小票打印格式及模板設(shè)置實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04詳解Android PopupWindow怎么合理控制彈出位置(showAtLocation)
本篇文章主要介紹了詳解Android PopupWindow怎么合理控制彈出位置(showAtLocation),具有一定的參考價值,有興趣的可以了解一下2017-10-10Android游戲開發(fā)學(xué)習(xí)②焰火綻放效果實現(xiàn)方法
這篇文章主要介紹了Android游戲開發(fā)學(xué)習(xí)②焰火綻放效果實現(xiàn)方法,以實例形式詳細分析了Android中粒子對象類Particle類和粒子集合類ParticleSet類及物理引擎ParticleThread類 的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Android 自定義組件衛(wèi)星菜單的實現(xiàn)
這篇文章主要介紹了Android 自定義組件衛(wèi)星菜單的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07