一、概述
Kotlin中集合框架相对于Java:
- 增加了“不可变”集合框架的接口;
- 没有另起炉灶,复用Java API的所有实现类型;
- 提供了丰富易用的方法,例如
forEach/map/flatMap
; - 运算符级别的支持,简化了集合框架的访问。
二、集合框架的接口类型对比
Kotlin | Java | |
---|---|---|
不可变List | List<T> | List<T> |
可变List | MutableList<T> | |
不可变Map | Map<K,V> | Map<K,V> |
可变Map | MutableMap<K,V> | |
不可变Set | Set<T> | Set<T> |
可变Set | MutableSet<T> |
注:Mutable标识可变的。
三、集合框架的创建
1.List的创建
- Java中创建List
List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3));
- Kotlin中创建List
// 不可变List:不能添加或者删除元素 val intList: List<Int> = listOf(1, 2, 3) // 可变List:可以添加或者删除元素 val intList2: MutableList<Int> = mutableListOf(1, 2, 3)
2.Map的创建
- Java中创建Map
Map<String, Object> map = new HashMap<>(); map.put("zhangsan", 20);
- Kotlin中创建Map
// 不可变 // "name" to "zhangsan",这里可以理解为K-V(Key to Value)即可 // Any等价于Java中的Object val map: Map<String, Any> = mapOf("name" to "zhangsan", "age" to 22) // 可变 val map2: MutableMap<String, Any> = mutableMapOf("name" to "zhangsan", "age" to 22)
四、集合实现类服用与类型别名(Kotlin特性)
以下是集合对应的类型别名:
typealias ArrayList<E> = java.util.ArrayList<E>
typealias LinkedHashMap<K, V> = java.util.LinedHashMap<K, V>
typealias HashMap<K, V> = java.util.HashMap<K, V>
typealias LinedHashSet<E> = java.util.LinedHashSet<E>
typealias HashSet<E> = java.util.HashSet<E>
五、集合框架的修改
- 添加元素
- java
for(int i = 0; i< 10; i++){ stringList.add("num:" + i); }
- kotlin
for(i in 0 .. 10){ stringList += "num:$i" }
- java
- 移除元素
- java
for(int i = 0; i< 10; i++){ stringList.remove("num:" + i); }
- kotlin
for(i in 0 .. 10){ stringList -= "num:$i" }
- java
六、集合框架的读写
- java
// List的读写
stringList.set(3, "HelloWorld");
String valueAt3 = stringList.get(3);
// Map的读写
HashMap<String, Integer> map = new HashMap<>();
map.put("Hello", 10);
System.out.println(map.get("Hello"));
- kotlin
// List的读写
stringList[3] = "HelloWorld"
val valueAt3 = stringList[3]
// Map的读写
val map = HashMap<String, Int>()
map["Hello"] = 10
println(map["Hello"])
// []内的值实际上就是key
七、Pair
Pair表示两个值的通用对(键值对),这个是Kotlin独有的。
val pair = "Hello" to "Kotlin"
val pair2 = Pair("Hello", "Kotlin")
val first = pair.first
val second = pair.second
// 解构表达式,相当于把pair拆分给x,y
val (x, y) = pair
八、Triple(类似Pair,用于三个元素的键值对维护)
val triple = Triple("x", 2, 3.0)
val first = triple.first
val second = triple.second
val third = triple.third
val (x, y, z) = triple
--