首先,我说一下,很多人大概都还在犹豫要不要学kotlin。
其实我也犹豫过,但是,我还是学了,正在学。
我来说一下我的看法。
对于一门编程语言的兴起,我们无法阻止,更不能阻止。
为什么呢?因为这代表了时代的进步,如果连时代的脚步都不跟上而是选择逃避或者观望,那么注定会被时代淘汰。
都2020了,我还在网上看见各种人,各种借口各种逃避。
没有用的,逃避解决不了任何问题。既然解决不了问题,那么就不能面对问题么?
多掌握一门技术总不是坏事。
很多人都说,妈耶,又出新的技术,学不动了。
呵呵,我想说,你学过么?认真学过么?
还是那句话:对于一门编程语言的兴起,我们无法阻止,更不能阻止。
人类所具备的最伟大的一个特点就是能学习,会学习。
不要让逃避成为借口,因为那会使你逐渐堕落、消亡。
1. List与MutableList
在java中,集合框架非常重要,几乎每个程序中都会用到。
然而在kotlin中,同样也提供了集合框架。
我们都知道,在java中有一个List<T>
集合。同样,在kotlin中也有List<T>
集合
但是两者是有区别的。
在java中List<T>
属于可变长度集合,也就是可以不停的add
,remove
然而在kotlin
中List<T>
是属于不可变长的集合。
看个例子:
可以看到。
- 我们首先
listof()
了一个list0:List<Int>
- 然后使用
list0.
查看了它支持的所有方法,白色加粗的方法是它自身方法。
发现有[]
数组的取值法,get()
的取值法,还有一系列其他方法。
但是独独没有add()
,remove()
方法。
那么,就有人会问了,如果我需要的可变长的List怎办呢?
来呗,接下来我们就来说说 MutableList
吧
中文意思不就是 可变的列表
么。
看图:
是不是出来了?
这就kotlin中可变列表 MutableList
与定长列表 List
的介绍了。
但是!!
为什么会有这两个可变概念呢?
2. List与MutableList在java中的定义(CollectionsKt)
之前也说过,kotlin是调用的jvm,所有的kotlin代码编译后,将会转换成class可执行文件。
那么我们就来看看在java中List与MutableList的概念了。
kotlin to java:
从上图我们可以看到,在java代码中两个变量list0
,list1
都是List类型。
但是从调用的方式来看,一个是调用CollectionsKt
下的listOf
,另一个则是调用的mutableListOf
那么这两个有什么区别呢?
也就是可变和不可变的区别了。
我首先把这部分的两个java list0
,List1
说开。
首先,java中的List<T>从来没有禁用过add和remove吧。
不论是ArrayList
和LinkedList
都有add和remove方法。那么由此是不是可以推倒出add和remove是由kotlin所控制的?
来,那就看看kotlin中的List
与MutableList
按住 ctrl+鼠标左键
点击指定方法,进入源码。
List
MutableList
瞧,刚打开就一目了然。
讲完了?!好吧……
3. Map 与 MutableMap
接下来就说Map
与MutableMap
了,与List一样,两者都是java中的Map
衍生出来的,就主要说说用法。
与java不同的是,java所用是map.put(key,value)
,kotlin中则是 key to value
注意to前后的空格哦。
一. Pair
另外就是Pair
了
val pair = "key" to "vlaue"
val pair1 = Pair("key11", "value11")
其实二者并没有什么不同,前者就相当于一个隐式的Pair
了,同时Pair
还定义了一个first
和一个second
,可以取key和value的值。
二. Triple
这是一个很新的类了,相较于Pair
Triple
就是多了一个成员
4. Set 与 MutableSet
5. 可变长框架的 增、删、查、改
在java中想要对List进行增删查改只需要add
,remove
,get
,replace
然而在kotlin中还有一种方式
list1.add("add1")
list1 += "add2"
运行结果:
list1.remove("add1")
list1 -= "add2"
运行结果:
类似数组的操作方式:
val v = list1[0]
list1[1] = "1000"
println(v)
println(list1)
val v1 = map1["key11"]
map1["key11"] = "我爱你"
println(v1)
println(map1)
6. typealias
接下来要说的就是typealias了,字面意思理解就是类型别名
那么什么是类型别名
呢?
dart中有typeof
,c++里有命名空间
首先,我们创建一个ArrayList
(这东西在java中可是及其常见的啊)
打开源码:
瞧,一系列的public actual typealias
分别赋值就是java.util.*
了
那么是不是显而易见了,就是给java中相应的类取了一个别名,好让它能在kotlin中使用。
7. actual与expect
既然碰到了actual
那我就提一下吧。
根据 //www.greatytc.com/p/c22ae432827a 这篇文章。
我们可以知道:
expect
定义了一个跨平台(jvm)接口
actual
则表示了该接口在kotlin中的实现
8. 总结
- kotlin中,
List
,Map
,Set
表示定长的集合,不能进行add
和remove
等一系列增删改 - kotlin中,
MutableList
,MutableMap
,MutableSet
与java中的List
,Map
,Set
无异 - kotlin中,
typealias
关键字表示定义别名,通俗来说就是取外号。