kotlin

#6 kotlin集合类型Array,List,Map

2019-07-26  本文已影响0人  JamesSawyer

大部分的语言的集合类型都大同小异,不过看到kotlin里面集合分成了可变类型集合和不可变类型集合。它们之间用处不同,可以相互进行转换,具体使用哪一种,这个在以后的实际使用中再去了解。

  1. 数组 Array
fun main() {
    
    // Array is immutable
      val en = arrayOf(2, 4, "10", 8) // 任意类型数据
    // val en2: Array<Int> = intArrayOf(2, 3, 4, 5);
    val intArray = intArrayOf(2, 3, 4, 5); // IntArray 类型
    val longArray: LongArray = longArrayOf(10, 23, 34, 90) // LongArray类型

    
    val sa = arrayOf("h", "e", "l")  
    // size property
    println("the length of sa is: ${sa.size}")
    
    // methods
    // first last isEmpty contains
    println("first item of sa: ${sa.first()} or ${sa[0]}")
    println("last item of sa: ${sa.last()}")
    println("sa is empty? ${sa.isEmpty()}")
    println("sa has 'l'? ${sa.contains("l")}")
    
    // indexOf 查找某个元素 未找到返回-1
    println("f is at index of ${sa.indexOf("f")}")
    
    // slice 截取数组部分
    var partSa = sa.slice(0..1)
    println("partSa is $partSa")
    for (ch in partSa) {
        println("ch in partSa $ch")
    }
    
    // drop dropLast
    val removeFirstOne = sa.drop(1)
    println("removeFirstOne: $removeFirstOne")
    val removeLastOne = sa.dropLast(1)
    println("removeLastOne: $removeLastOne")
}

可以看出

关于 IntArray 这种数据类型,和其它语言中的Int类似,但是这种写法我是第一次见,可以参考:

  1. List

注意这个和上面的array的区别,array一般是不可变数据类型。另外这个分为可变list集合(MutableList | ArrayList)和不可变list集合(List)

fun mutableListMethod() {

  val names = listOf("kobe", "jordan")

  // 可变list 可先声明 后操作
  val teamNames = mutableListOf<String>()

  teamNames.addAll(names)

  println("now teamNames are : $teamNames")

  teamNames.add("Durant")
  teamNames.add("Harden")
}
   
// 可变示例
fun mutableExample() {
  var name = ArrayList<String>()
  name.add("sam")
  name.add("brook")

  fun printNames(names: ArrayList<String>) {
    println(names)
    // 可变类型List 使用 removeAt
    // 不可变List 不能使用移除方法
    names.removeAt(0)
  }
  printNames(name)
  println("after remove fist one of names: $name")
}

// 不可变示例
fun immutableExample() {
  var name = ArrayList<String>()
  name.add("sam")
  name.add("brook")

  // 此处使用List<String>
  fun printNames(names: List<String>) {
    println(names)
  }
  printNames(name)
  println("after remove fist one of names: $name")
}

ArrayList 相当于一个可变集合。

知识点:

  1. 字典Map

这个就是其它语言中的字典,写法有点不一样,同样也分为了可变Map,和不可变Map

fun mapMethod() {
  var namesAndScores = mapOf(
    "Anna" to 2,
    "Louis" to 23,
    "Lily" to 7
  )
  // 如果map里面不存在该key 则返回null
  println("lily's score is ${namesAndScores["Lily"]}")
  println("the count of namesAndScores: ${namesAndScores.count()}")


  // 可变map
  val mutableMap = mutableMapOf(
    "name" to "Bot",
    "age" to 12,
    "grade" to "3A2B"
  )

  // 添加新的key-value
  mutableMap["gender"] = "male"

  // remove 移除某个key-value
  mutableMap.remove("age")

  for ((key, value) in mutableMap) {
    println("$key : $value")
  }

  // 枚举所有键或值
  // mutableMap.values & mutableMap.keys
  for (value in mutableMap.values) {
    println("the value in mutableMap is $value")
  }

}

mapMethod()

fun printLocation(person: Map<String, Any>) {
    val state = if (person.containsKey("state")) person["state"] else ""
    val city = if (person.containsKey("city")) person["city"] else ""

    println("person lives in $city, $state")
}

val person = mapOf(
  "city" to "LA",
  "state" to "CA"
)

printLocation(person)

知识点:

此文只是粗略的认识一下kotlin中的集合类型,还有 Set 集合类型,未讲到,这个基本和JS中的 Set 类型类似。

初步印象,有几点疑惑:

大致觉得是不同类型的集合效率不同,但是个人感觉增加了复杂度😝

对于集合的基础知识,掘金上有一篇文章写的挺好的:

2019年07月26日00:54:34

上一篇下一篇

猜你喜欢

热点阅读