Kotlin集合

集合派生的两个接口

  • Collection
    • MutableCollection
      • MutableSet 可变集合
      • MutableList 可变集合
    • Set 不可变集合
    • List 不可变集合
  • Map

集合的分类

  • 可变集合
  • 不可变集合

1)Set
set的声明:

 //通过setOf()创建不可变集合,元素可以为0个或多个
    var result = setOf("Java","Python","C++")
    print(result)//[Java, Python, C++]
   
    //mutableSetOf  元素可以为0个或多个
    var result2 = mutableSetOf("Java","Python","C++")
    print(result2)//[Java, Python, C++]
   
    //hashSetOf   不保证元素的顺序   元素可以为0个或多个
    var result3 = hashSetOf("Java","Python","C++")
    print(result3)//[Java, C++,Python]
   
   //linkedSetOf   元素可以为0个或多个
    var result4 = linkedSetOf("Java","Python","C++")
    print(result4)//[Java, Python, C++]
   
   //sortedSetOf    对元素进行排序   元素可以为0个或多个
    var result5 = sortedSetOf("Java","Python","C++")
    print(result5)//[Java, Python, C++]

set的使用:和Array差不多

 //创建不可变集合
   var set = setOf("java","python","C++","C")
   
   //判断是否所有元素的长度都大于4
   print(set.all({it.length > 4}))
   
   //判断是否任一元素的长度都大于4
   print(set.any({it.length > 4}))
   
   //以Lambda表达式的值为key,集合元素为value,组成Map集合
   print(set.associateBy({"${it}的值"}))//{java的值=java, python的值=python, C++的值=C++, C的值=C}
   
   //使用in !in运算符
   print("java" in set);//true
   print("java" !in set)//false
   
  
  //set删除元素
   print(set.drop(2))//删除集合前两个元素
   
   //对集合进行过滤
   print(set.filter({"C" in it}))//[C++, C]
   
   //查找set中的元素并返回,没有返回null
   print(set.find({"C++" in it}))//C++
     
   //将 Set 集合中的所有字符串拼接在一起
   print(set.fold ("",{ace,e ->ace+ e}))//javapythonC++C
   
   //查找某个元素出现的位置
   print(set.indexOf("C++"))//2  索引为2
   
   //将每个集合元素映射成新值,返回所有新值组成的 Set 集合
   print(set.map({"疯狂"+it}))//[疯狂java, 疯狂python, 疯狂C++, 疯狂C]
   
   //max()和min()分别获取最大值和最小值
   val result2 = setOf(1,3,4)
   print(result2.max());print(result2.min());
    
   //反转集合顺序
   print(result2.reversed())//[4, 3, 1]

遍历Set

  • 使用for ... in
 var set = setOf(1,2,3,4,5)
  for(item in set){
        print(item)
  }
  • 使用forEach:需要接受 Lambda 表达式作为参数
set.forEach({print(it)})
  • 使用了 indices返回集合索引区间
  for(index in set.indices){
       print(index)//索引
       print(set.elementAt(index))//某个元素
  }

mutableSetOf可变集合 添加 删除 清空

  var set = mutableSetOf(1,2,3,4,5)
  var set2 = mutableSetOf(6,7,8)
 
  //添加集合  add   addAll
  set.add(9)
  print(set)//[1, 2, 3, 4, 5, 9]
  
  set.addAll(set2)
  print(set)//[1, 2, 3, 4, 5, 9, 6, 7, 8]
  
  
  //删除集合  remove   removeAll
  set.remove (1)    
  set.removeAll(setOf(1,2))
  
  //清空集合
  set.clear()

Set和mutableSetOf都提供了Iterator 。

  • Set只有 hasNext和 next()两个方法
  • mutableSetOf除了hasNext和 next(),还有remove()方法,可用于遍历时删除元素
    var set = mutableSetOf(1,2,3,4,5)
    var it = set.iterator()
    
    while(it.hasNext()){
        var item = it.next()
        if(item==1){
            it.remove()
        }
    }
    print(set)//[2, 3, 4, 5]

2)List

List的声明:

  • listOf(): 该函数返回不可变的 list集合。该函数可接受 0个或多个参数。
  • listOfNotNull ():该函数与前一个函数的唯一区别是,该函数会自动去掉传入的 null。
  • mutablelistOf():可变集合
  • arraylistOf(): 该函数返回可变的 ArrayList 集合。如果要使用ArrayList,就用arraylistOf声明,不要用mutablelistOf声明。
    //listOf                     不可变集合
    var list = listOf(1,2,3,4,5)
    print(list) //[1, 2, 3, 4, 5]
    
    //listOfNotNull         不可变集合
    var list2 = listOfNotNull(null,1,2,3,4,5)
    print(list2)//[1, 2, 3, 4, 5]
    
    //arrayListOf           可变集合
    var list3 = arrayListOf(1,2,3,4,5)
    print(list3)//[1, 2, 3, 4, 5]
    
     //listOfNotNull        可变集合
    var list4 = mutableListOf(1,2,3,4,5)
    print(list4)//[1, 2, 3, 4, 5]

List的方法:

  • 通过 [index]访问集合元素
  • indexOf返回元素在List中的位置
  • lastlndexOf返回集合元素在List中最后出现一次的位置
  • subList获取集合元素的子元素
list.subList((1,3))//包含下标1,不包含3

对可变List(mutableListOf,arrayListOf)的操作

    list3[0] = 10           //替换元素
    list3.add(2,100)   //添加元素
    list3.removeAt(1)  //移除某个元素
    list3.clear()   //清空元素

3)Map集合

map的声明:
Kotlin 需要使用 to 指定 key-value

  //key ralue 对按添加顺序排列     不可变map
   var map = mapOf("value1" to 1,"value2" to 2,"value3" to 3)
   print(map)//{value1=1, value2=2, value3=3}
   
   // key-value 对按添加顺序排列   可变map
   var mutableMapOf = mutableMapOf("value1" to 1,"value2" to 2,"value3" to 3)
   
   ///不保证 key-value 对的顺序   可变map
   var hashMap = hashMapOf("value1" to 1,"value2" to 2,"value3" to 3)
   
   // key-value 对按添加顺序排列    可变map
   var linkedMapOf = linkedMapOf("value1" to 1,"value2" to 2,"value3" to 3)
   
   //key-value 对按 key 由小到大排列  可变map
   var sortedMapOf = sortedMapOf("value1" to 1,"value2" to 2,"value3" to 3)

Map使用方法:
all
any

通过in !in 来判断map中是否存在某个key

 var map = mapOf("value1" to 1,"value2" to 2,"value3" to 3)
 print("value1" in map)//true
 //对map进行过滤,要求key包含"value1"
 print(map.filter({"value1" in it.key}))//{value1=1}

遍历Map:

  • 通过 [] 来获取value值
   var map = mapOf("value1" to 1,"value2" to 2,"value3" to 3)
   print(map["value1"])  //1
  • map遍历的几种方式
   var map = mapOf("value1" to 1,"value2" to 2,"value3" to 3)
   
   //第一种:entrie包含了key-value
   for(entrie in map.entries){
       print("${entrie.key}的值是${entrie.value}\n")
   }
   
   //第二种:先遍历Key,通过key获取value
    for(key in map.keys){
       print("${map[key]}")
   }
   
   //第三种:直接获取key-value
   for((key,value) in map){
       print("key是${key},value是${value}")
   }
   
   //第四种:使用Lambda表达式
   map.forEach({print("${it.key} -> ${it.value}")})
    

Map的操作:

  • clear():清空所有的key-value
  • put(key,value):放入key-value,如果已经有,就会覆盖原来的。
    除了put放入元素外,还可以使用 [] 更加简单:
//以下这两种是一样的,[]这种更简单
mutableMap [”Swift” ]1 = 9000
mutableMap.put (”Swift ”, 9000)
  • putAll(Map对象):批量放入多个key-value。
  • remove(key):移除某个key-value键值对。

你可能感兴趣的:(Kotlin集合)