Kotlin List

368 阅读2分钟

Intro

List以指定的顺序存储元素,并提供使用索引访问元素的方法。索引从0开始 - 第一个元素的索引 - 直到最后一个元素的索引 即 (list.size - 1).

如上图,现在xxxlist.get(index_number)建议写成类似数组中获取元素的方法xxxlist[index_number].

List元素(包括空值)可以重复:List可以包含任意数量的相同对象或单个对象的出现。如果两个list在相同的位置具有相同大小和相同结构的元素,则认为他们是相等的。

MutableList

可以进行写操作的List,例如用于在特定位置添加或删除元素。

注意👆截图中mutable_numbers是val型,而不是var。概念区别:

1. List 和 mutableList的区别是对象的点操作能不能出现add(), removeAt()等更改原List的方法

2. val 型 和 var 型的mutableList的区别是对象能不能不能通过外部方式强行更改,举个🌰 :

上图中,val型的mutableList不能用=的操作被重新赋值,而之后的var型变量mutable_numbers_2就可以,但是它的类型已经确定是mutableList,对于改变类型的操作是违规的。

More

List 与数组(Array)非常相似。但是,有一个重要的区别:数组的大小是在初始化时定义的,永远 不会改变; 反之,List 没有预定义的大小;作为写操作的结果,可以更改 List 的大小:添加,更新或删除元素。

在 Kotlin 中,List 的默认实现是 ArrayList,可以将其视为可调整大小的数组。 

Experience from Kotlin 99

1. Try to use the lastIndex attribute instead of .size-1 to represent list length

2. Try to use concise function style if the return statement is short

3. The annotation to test the method that should throw any exception

4. Tailrec in Kotlin

更详细的tailrec修饰词的作用见文章末的Reference

5. Kotlin注解@Suppress("unused")说明此方法不被使用

6. list.drop(1).dropLast(1)扔掉list的第一个和最后一个元素

7. @Suppress("UNCHECKED_CAST")可以屏蔽编译期时抛出的"UNCHECKED_CAST"警告

用这个注释能够屏蔽掉多种编译期间抛的Warning甚至Error,更多🌰 见此博文中。

8. 这是一个list在kotlin中:it is List<*>

reversed vs asReversed

mutableList 有两个自定义方法,一个是reversed(), 一个是asReversed(). 下图展示了它们的区别。asReversed在创建出之后会随着原list的变化而变化,而reversed只是输出某个list的反。

Reference

kotlin学习笔记之尾递归优化(tailrec)

Kotlin趣味注解@Suppress

Kotlin 语言文档