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

Posted happydeer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于Kotlin/Java之常用“集合型”数据类型的主要内容,如果未能解决你的问题,请参考以下文章

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

python中数据类型包括

Python数据类型之字符串

C#高级语法之泛型泛型约束,类型安全逆变和协变(思想原理)

JavaSE基础八----<集合>泛型集合体系Collection接口中的方法

python数据类型之字符串