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












网友评论