Kotlin/Java之常用“集合型”数据类型

****** 先说说数组 Array 和 ArrayList ******  
<数组 Array>
整型数组初始化:val point = intArrayOf(0, 0)   // 实为IntArray,对应Java类型 int[]
其他还有:charArrayOf、byteArrayOf、longArrayOf、floatArrayOf、booleanArrayOf等,详见Library.kt

泛型Array<T>:
val array = arrayOf(1, 2, 3)  // 实为Array<Int>,对应Java类型 Integer[]
val array = arrayOf("a", "b", "c")   // 没有mutableArrayOf()!!!

注:IntArray性能更好!
Java中的 int[] Integer[] 有啥区别呢?不用多解释了吧... int是Java的基本数据类型,Integer是int的包装类(属于引用数据类型)

<数组列表 ArrayList>
// ArrayList、HashMap、HashSet等定义在 TypeAliases.kt,实际为java.util.*中的数据类型的别名
// 几种使用方式:
data class Feature(val name: String, val value: Int, var supported: Boolean = false)
val effectList = ArrayList<Feature>()
effectList.add(Feature("tick", "100", true)) // 元素是自定义数据对象
...
val list = ArrayList<String>()
list.add("a")
...
val list = arrayListOf("Shanghai", 200, 3.14)  // 元素数据类型各不相同
list.add("Beijing")
...

val map = HashMap<String, Int>()  // 顺便对比一下
map.put("Apple", 1)
map["Banara"] = 2
...

== Array与ArrayList的主要区别 ==
* 初始化:Array须指定大小,ArrayList不必
* Array只能存同构对象(声明为object[]的除外),ArrayList可以存异构
* Array不能增删元素,ArrayList可以
Array.toList() 可以返回一个List<T>列表
ArrayList.toArray() 可以返回一个object[]数据
参考文章:https://www.cnblogs.com/java-friend/p/11770169.html

List有两个具体实现:ArrayList和LinkedList
ArrayList底层是由数组实现的,实现一个可变长度的动态数组;
LinkedList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能,但在get与set方面弱于ArrayList。


****** List、Set、Map ******  // 没有mutableArrayOf() !!!
快速初始化 val list = listOf("Apple", "Banana", "Orange")  // 创建了不可变list,对比 mutableListOf
初始化可变列表 val list = mutableListOf("Apple", "Banana", "Orange")  // 后续可以调用list.add("Pear")

遍历:
for (fruit in list) {
        println(fruit)
}
list.forEach {
        println(it)
}

类似,val set = setOf("Apple", "Banana", "Orange")  // 以及mutableSetOf
set与list的区别:set底层使用hash映射机制来存储数据,集合中的元素无法保证有序!

val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 5) // 以及mutableMapOf
for ((fruit, number) in map) {
     println("$fruit - $number")
}
map.forEach {
     Log.v(TAG, "${it.key} - ${it.value}")
}

// 非常贴心的getOrPut()
// 适用场景:延迟加载-初始化
val map2 = mutableMapOf("Apple" to 1, "Banana" to 2, "Orange" to 5)
val num = map2.getOrPut("Cherry") {
      // 做必要的加载和赋值
      // ...
}


****** Kotlin集合的函数式API ****** // 详见_Collections.kt
val ele = list.maxByOrNull { it.length }  // 按“规则”取最大值,e.g. 字符串最长的那个
val newList = list.map { it.uppercase() } // 按“规则”做映射生成新list,e.g. 全部转成大写字母
val newList = list.filter { it.length <= 5} // 按“规则”过滤生成新list,e.g. 挑出长度不大于5的元素
判断函数:
val result = list.any { it.length <= 5 } // 返回布尔型,判断:集合中是否存在至少一个元素满足指定条件
val result = list.all { it.length <= 5 } // 返回布尔型,判断:集合中是否所有元素满足指定条件

****** 数据库 ******
val values = ContentValues()   // [对比] map中元素的key/value是固定类型
values.put("name", "Game of Thrones")
values.put("price", 38.8)
...
// KTX库中提供的便捷用法
val values = contentValuesOf("name" to "Game of Thrones", "price" to 38.8, "pages" to 800)

猜你喜欢

转载自blog.csdn.net/happydeer/article/details/124390973
今日推荐