美文网首页kotlin
#6 kotlin集合类型Array,List,Map

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

作者: JamesSawyer | 来源:发表于2019-07-26 02:00 被阅读0次

大部分的语言的集合类型都大同小异,不过看到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")
}

可以看出

  • 数组的初始化方式为: arrayOf()
  • 不同类型的数组类型
    • IntArray
    • BooleanArray 等等类型
  • 常见的一些方法,和js中的lodash库提供的方法名类似
    • size: 获取数组长度
    • first | last | isEmpty | contains 等常用方法
    • indexOf | slice | drop | dropLast

关于 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 相当于一个可变集合。

知识点:

  • 初始化方式
    • listOf() | mutableListOf()
    • listOf<String>() 指定特定类型的键值类型
  • 属性:
    • removeAt(someIndex): 可变类型list,移除某个索引位置元素
    • add(item): 可变类型list,添加某个item
    • addAll(someOtherList) : 将其它list全部添加进去
  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)

知识点:

  • 初始化方式

    • mapOf() | mutableMapOf()
    • mapOf<String, String>() 指定特定类型的键值类型
  • 属性:

    • count(): 获取map长度
    • remove(someKey): 通过key值移除某个key-value
    • values | keys : 获取map中的所有值或者keys
    • containsKey(someKey): 是否包含某个key
  • 键值对的写法

    • key to value, 其中 to 是关键词

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

初步印象,有几点疑惑:

  • 为什么要把数组和list进行区分
  • 还有就是ArrayList,List,IntArray... wtf
  • 为什么要分为可变类型集合和不可变类型集合

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

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

2019年07月26日00:54:34

相关文章

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

    大部分的语言的集合类型都大同小异,不过看到kotlin里面集合分成了可变类型集合和不可变类型集合。它们之间用处不同...

  • 8.集合类型(CollectionType)

    kotlin_集合类型 Array_数组 Set Map swift_集合类型 Array_数组

  • [Kotlin Tutorials 7] Kotlin集合

    Kotlin集合 集合创建 Kotlin标准库提供了set, list和map这三种基本集合类型的实现, 每种类型...

  • Kotlin进阶 - 集合

    本篇主要讲述Kotlin集合,主要包括List、Set、Array、Map四类。 一、List篇 1.1 固定长度...

  • 四、Kotlin集合

    "集合:List、Set、Map" 集合:List、Set、Map 与大多数语言不同,Kotlin 区分可变集合和...

  • 常用数据结构

    数组Array,集合(List,Set,队列Queue,栈Stack),散列表Map 一、数组:长度固定,元素类型...

  • Kotlin集合使用

    1、集合类型 Kotlin 标准库提供了基本集合类型的实现: set、list 以及 map。 一对接口代表每种集...

  • Kotlin基础之容器

    容器 Kotlin有3类基本的容器:集合Set、队列List、映射Map,每类容器又分为只读与可变2中类型,即有6...

  • 整理笔记(线程和垃圾回收器)

    1. 集合部分. 集合有List,map,set List有arrayList和LinkedList Array是...

  • Kotlin学习(五) 集合

    Java 中已经提供了很强大的集合框架,提供了常用的集合类型,比如 List、Set、Map 等。而 Kotlin...

网友评论

    本文标题:#6 kotlin集合类型Array,List,Map

    本文链接:https://www.haomeiwen.com/subject/jfylrctx.html