kotlin
迭代器
Kotlin的Collection API的根基是Iterator
接口,类似于Java。 但是类似的行为在那之后就停止了。 java.util.ListIterator
功能分为不同的约定:
-
ListIterator
向前和向后移动迭代器索引 -
MutableIterator
从迭代器中删除内容 -
MutableListIterator
从上面的2个接口继承来模仿java.util.ListIterator
的整个协定
收集,列出和设置
Kotlin中的集合层次结构与Java中的非常相似: Collection
, List
和Set
。 (我不会详细说明地图,但是它们遵循相同的设计)。 唯一但巨大的区别是,它分为可变类型和不可变类型。 可变类型具有更改其内容的方法( 例如 add() and `set()
),而不可变类型则没有。
当然,与Java相比,层次结构要详细一些,但这是从其父级经验中受益的语言所期望的。
实作
恕我直言,关于Kotlin集合的重要一点不是其层次结构-尽管了解可变和不可变之间的区别很重要。
正如Java开发人员所知,Java中没有开箱即用的不可变集合类型。 当需要一个不可变的集合时,必须通过对相关Collections.unmodifiableXXX()
的调用将可变集合包装为不可修改的类型。 但是不可修改的类型不是public
,它们在Collections
是private
的:返回的类型是通用类型( List
或Set
接口)。 这意味着它们实现了标准集合的所有方法 。 不变性来自与可变有关的方法抛出异常:在编译时,无法区分可变和不可变集合。
相反,Kotlin提供了可变类型和不可变类型之间的清晰区分。 它还提供了专用功能来创建相关类型的对象:
与Scala相对,Kotlin并没有实现自己的集合类型,而是重用了Java中的那些类型。 这意味着,即使编译时类型是不可变的, 运行时类型也始终是mutable 。 缺点是可以通过将集合元素转换为正确的运行时类型来更改集合元素。 恕我直言,这并不比允许标准反射严重。 但是有几个优点:
- 加快上市时间
- Java集合类型受益于多年的改进
- 将来可以在完全向后兼容的情况下更改基础实现
kotlin