# Kotlin - 集合資料型態,List、Map、Set 集合
###### tags: `Tag(Kotlin 筆記)`
[TOC]
## Java 和 Kotlin 差別
* Kotlin 在宣告集合時就進行初始設定值,如同對陣列進行初始化那樣。
* Java 無法同時宣告並進行初始設定值。
## List、Map、Set 集合
Kotlin 中的 List、Map、Set 只能讀取,是無法進行修改,若需要可讀可寫,需使用 MutableList、MutableMap、MutableSet。
* Set setOf 不可變 \ MutableSet mutableSetOf 可變
* List listOf 不可變 \ MutableList mutableListOf 可變
* Map mapOf 不可變 \ MutableMap mutableMapOf 可變
---
## Set、List、Map 相同公共方法
* isEmpty 是否為空
* isNoEmpty 不可為空
* clear 清除
* contains 包含指定元素
* iterator 反覆運算
* count == size
---
## 集合分別說明:
### Set / MutableSet
Set 唯讀 / MutableSet 可新增,不可修改
* 特性:
1. ==不按順序排列==,無法照索引值存取
2. 元素存在唯一值,透過雜湊值驗證是否相同元素
* MutableSet 可新增,不可修改
1. add 只能放入陣列中,但無法知道方入位置
2. remove 刪除指定元素,無法指定某個位置刪除
```clike=
//Set 初始化
val set: Set<String> = setOf("小明", "小美", "小王")
// MutableSet 初始化
var mutableSet: MutableSet<String> = mutableSetOf("小明", "小美", "小王")
```
---
### List / MutableList
List / MutableList
* 特性:
1. ==有序列性==,透過get取得指定位置的元素
2. 但修改需 MutableList
3. indices 索引陣列
* MutableList 新增、刪除、修改
1. add 可以指定增加的位置,增加到陣列最後元素
2. set 取代或修改指定位置的元素
3. removeAt 刪除指定位置的元素
4. sort 元素重新排序
5. sortBy 指定條件升幕排列
6. sortByDescending 指定條件降幕排列
```clike=
//List
val list: List<String> = listOf("iPhone", "Android", "ios")
// MutableList
var mutableList: MutableList<String> = mutableListOf("iPhone", "Android", "ios")
```
---
### Map / MutableMap
* 特性:
1. ==Key-Value==,key 唯一不能重覆。
2. containsKey 是否存在指定Key的元素
3. ==mapOf 初始化 [key to value]==
* MutableMap 新增、刪除、修改
1. ==mutableMapOf 初始化 Pair(key, value)==
2. put 會先找key相同元素取代舊元素,找不到就新增元素
3. remove key刪除指定元素
```clike=
//mapOf 初始化 [key to value]
val map: Map<String, String> = mapOf(
"iPhone" to "1" ,
"Android" to "2",
"ios" to "3")
//MutableMapOf 初始化 Pair(key, value)
var mutableMap: MutableMap<String, String> = mutableMapOf(
Pair( "iPhone","1"),
Pair( "Android","2"),
Pair( "ios","3")
)
```
---