一、概述

Kotlin中集合框架相对于Java:

  1. 增加了“不可变”集合框架的接口;
  2. 没有另起炉灶,复用Java API的所有实现类型;
  3. 提供了丰富易用的方法,例如forEach/map/flatMap
  4. 运算符级别的支持,简化了集合框架的访问。

二、集合框架的接口类型对比

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>

五、集合框架的修改

  1. 添加元素
    • java
         for(int i = 0; i< 10; i++){
                 stringList.add("num:" + i);
         }
      
    • kotlin
         for(i in 0 .. 10){
             stringList += "num:$i"
         }
      
  2. 移除元素
    • java
         for(int i = 0; i< 10; i++){
                 stringList.remove("num:" + i);
         }
      
    • kotlin
         for(i in 0 .. 10){
             stringList -= "num:$i"
         }
      

六、集合框架的读写

  • 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

--