
----《第一季Kotlin崛起:次世代Android开发 》学习笔记
总目录: 每天学一点 Kotlin ---- 目录
上一篇: 每天学一点 Kotlin -- 集合:Map
下一篇: 每天学一点 Kotlin -- 集合类型共性
11 根据集合类型的整体特性,Kotlin 中分为3种集合:
(1) 有序可重复: Array -- 数组
(2) 有序不重复: Set
(3) 无序不重复: Map
21 定义:
22 和 Map 的主要区别: MutableMap 支持添加或删除元素,即自身大小是可变的 。---- 这一点感觉没有 Java 中的 Map 方便。
23 内置的主要方法:
(1) 添加或更新: put 或 下标方法
(2) 添加其他Map: putAll 或 += *** 作符
(3) 移除键值对:remove
(4) 清空Map: clear
24 举个栗子:
Any类型是Kotlin所有非空类型的超类型(非空类的根),包含像Int这样的基本数据类型。
在Kotlin中,把基本类型的值直接赋值给Any类的变量时会自动装箱
Any是非空类,所以Any类型的变量不持有null值。如果你需要可以持有任何可能值得变量,包含null在内,则必须使用Any?类型。在底层,Any类型对应javalangObject,在Kotlin函数使用Any 时,它会编译成为Java字节码的Object。
Kotlin类可以使用继承自Any的toString、equals和hashCode方法,但是不能使用Object的其他方法(如wait和notify)可以手动把值转换成javalangObject使用。
Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型
赋值转换 toInt(): Int toLong():Long toFloat():Float toDouble():Double toChar(): Char
大宽度转小宽度精度丢失
11 整数类型:Byte、Short、Int、Long
未超出Int 最大值默认为Int,超出默认为Long
var a = 1 (Int )
var b =300000000000000 (Long 超出 Int 的最大值)
12 浮点类型 :Double、Float
var a =314 (Double)
var b = 27184545 (Double)
var c = 22145456454547854f (Float, 实际值为 22145456, 十进制最多包含6~7位数,会舍入)
13 字符类型:Char 字符类型可以转换为其他类型
var char = 'a'
var a = chartoLowerCase() (小写转换)
var A = chartoUpperCase() (大写转换)
14 布尔类型
val m =true val n =false
可变变量定义:var 关键字 可读写
不可变变量定义:val 关键字 (类似于java: final)只读不写
常量: const 大写格式
用冒号 : 隔开,可省略类型直接赋值
21 <关键字> <标识符> : <类型> = <初始化值>
var a: Int = 1
22 声明时初始初始化未设置类型
var a = 1 (系统自动判断设置为int)
var a = "str" (系统自动判断设置为字符串)
23 声明时初始初始化只提供类型
var a: Int
a = 1 (赋值)
a +=1 (修改变量)
24 $:表示一个变量名或者变量值
var a= "a is"
var b = $a $varName 表示变量值
val b = "${areplace("is", "was")}" ${varNamefun()} 表示变量的方法返回值 ( b值为a was)
25 静态常量赋值
const val a =1
构成:关键字声明+函数名+参数+返回类型+ 函数体,Kotlin函数默认修饰符public
31 无参数函数
fun sum(){ }
32 无返回值函数
fun sum(a: Int, b: Int): Unit {
print(a + b)}
}
33 有返回值函数
fun sum(a: Int, b: Int): Int {
c = a + b
return c
}
34 单表示式函数:省略花括号
fun sum(a: Int, b: Int) = a+b
fun main(){
val a :Array<Int> = arrayOf(1,2,3)
}
Array<Any> 任意类型
1for ( int i=1 ; i<=100 ; i++ ) ------> for ( i in 1100 )
2 for ( int i=100 ; i>=100 ; i-- ) ------> for ( i in 100 downTo 1 )
3迭代器(iterator) for(int item: list) ------> for (item in list )
class Name{ (定义一个name的类)
var a: String = "a" (类的属性)
val b: Int = 1;
}
fun main(){
var name: Name= Name() (构造函数创建类实例)
namea = "a is" (赋值)
}
选择排序:
java:
kotlin :
Kotlin 文件以 kt 为后缀。
kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。
以上例中 test() 的全名是 comrunoobmaintest、Runoob 的全名是 comrunoobmainRunoob。
如果没有指定包,默认为 default 包。
有多个包会默认导入到每个 Kotlin 文件中:
函数定义使用关键字 fun,参数格式为:参数 : 类型
表达式作为函数体,返回类型自动推断:
无返回值的函数(类似Java中的void):
函数的变长参数可以用 vararg 关键字进行标识:
lambda表达式使用实例:
可变变量定义:var 关键字
不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)
常量与变量都可以没有初始化值,但是在引用前必须初始化
Kotlin 支持单行和多行注释,实例如下:
与 Java 不同, Kotlin 中的块注释允许嵌套。
$ 表示一个变量名或者变量值
$varName 表示变量值
${varNamefun()} 表示变量的方法返回值:
当 str 中的字符串内容不是一个整数时, 返回 null:
以下实例演示如何使用一个返回值可为 null 的函数:
或者:
我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
或者
甚至还可以
区间表达式由具有 *** 作符形式 的 rangeTo 函数辅以 in 和 !in 形成。
区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:
输出结果:
本篇记录了 Kotlin 常用集合的相关 *** 作,用以熟练使用 Kotlin 里的相关集合。集合接口与相关函数位于 kotlincollections 包中。
Kotlin 标准库提供了基本集合类型的实现: Set、List 以及 Map。 一对接口代表每种集合类型:
其中灰色是不可变集合,**是可变集合。 Iterator 意为迭代器, Collection 是只读接口,而 MutableCollection 是一个具有写 *** 作的 Collection 接口:
List< T> 以指定的顺序存储元素,并提供使用索引访问元素的方法。从第一个元素索引0 到最后一个元素索引 (listsize - 1) 为止。 List 的默认实现是 ArrayList 。
执行结果会转化为 Map :
Set 内部是用 Map 实现的, Set 相关的实现详见: Java Collection系列之:HashSet、LinkedHashSet、TreeSet的使用及源码解析
Map<K, V> 不是 Collection 接口的继承者;但是它也是 Kotlin 的一种集合类型。 Map 存储 键-值 对(或 条目);键是唯一的,但是不同的键可以与相同的值配对。 Map 接口提供特定的函数进行通过键访问值、搜索键和值等 *** 作。 Map 相关的实现详见: Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析
Iterable 处理包含多个步骤时,每个处理步骤完成并返回其结果——中间集合,然后在此集合上执行后续步骤。 Sequence 序列仅当请求整个处理链的结果时才进行实际计算: Sequence 对每个元素逐个执行所有处理步骤。
结论 :序列可避免生成中间步骤的结果,从而提高了整个集合处理链的性能。 但是,序列的延迟性质增加了一些开销,这些开销在处理较小的集合或进行更简单的计算时可能很重要。 因此,应该同时考虑使用 Sequence 与 Iterable ,并确定在哪种情况更适合。
执行结果:
执行结果:
上述序列中, Sequence 处理需要 18 个步骤, Iterable 需要 23 个步骤来执行列表 *** 作,上述示例参见 Sequence序列 *** 作 。
创建与现有集合具有相同元素的集合,可以使用复制 *** 作,例如 toList()、toMutableList()、toSet() 等等。标准库中的集合复制 *** 作创建了具有相同元素引用的 浅复制 集合。 因此, 对集合元素所做的更改会反映在其所有副本中,如果对源集合进行添加或删除元素,则不会影响副本 。
排序主要使用 Comparable 及 Comparator 。其中 Comparable 可以理解为是内部排序, Comparator 是外部排序。
集合排序示例:
以上就是关于每天学一点 Kotlin -- 集合:MutableMap全部的内容,包括:每天学一点 Kotlin -- 集合:MutableMap、Kotlin Any、Kotlin 基础语法知识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)