每天学一点 Kotlin -- 集合:MutableMap

每天学一点 Kotlin -- 集合:MutableMap,第1张

----《第一季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 基础语法知识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9560417.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存