kotlin_Kotlin收藏

kotlin

这个职位应该是Scala vs Kotlin 系列中的第5个。

不幸的是,我必须承认我很难阅读Scala集合的文档, 例如

trait LinearSeq [+A] extends Seq[A] with collection.LinearSeq[A] with GenericTraversableTemplate[A, LinearSeq] with LinearSeqLike[A, LinearSeq[A]]

因此,我将仅描述Kotlin方面的收藏。

迭代器

Kotlin的Collection API的根基是Iterator接口,类似于Java。 但是类似的行为在那之后就停止了。 java.util.ListIterator功能分为不同的约定:

  1. ListIterator向前和向后移动迭代器索引
  2. MutableIterator从迭代器中删除内容
  3. MutableListIterator从上面的2个接口继承来模仿java.util.ListIterator的整个协定
迭代器API

收集,列出和设置

Kotlin中的集合层次结构与Java中的非常相似: CollectionListSet 。 (我不会详细说明地图,但是它们遵循相同的设计)。 唯一但巨大的区别是,它分为可变类型和不可变类型。 可变类型具有更改其内容的方法( 例如 add() and `set() ),而不可变类型则没有。

当然,与Java相比,层次结构要详细一些,但这是从其父级经验中受益的语言所期望的。

收集,列出和设置

实作

恕我直言,关于Kotlin集合的重要一点不是其层次结构-尽管了解可变和不可变之间的区别很重要。

正如Java开发人员所知,Java中没有开箱即用的不可变集合类型。 当需要一个不可变的集合时,必须通过对相关Collections.unmodifiableXXX()的调用将可变集合包装为不可修改的类型。 但是不可修改的类型不是public ,它们在Collectionsprivate的:返回的类型是通用类型( ListSet接口)。 这意味着它们实现了标准集合的所有方法 。 不变性来自与可变有关的方法抛出异常:在编译时,无法区分可变和不可变集合。

相反,Kotlin提供了可变类型和不可变类型之间的清晰区分。 它还提供了专用功能来创建相关类型的对象:

集合创建功能

与Scala相对,Kotlin并没有实现自己的集合类型,而是重用了Java中的那些类型。 这意味着,即使编译时类型是不可变的, 运行时类型也始终是mutable 。 缺点是可以通过将集合元素转换为正确的运行时类型来更改集合元素。 恕我直言,这并不比允许标准反射严重。 但是有几个优点:

  1. 加快上市时间
  2. Java集合类型受益于多年的改进
  3. 将来可以在完全向后兼容的情况下更改基础实现

更进一步:

翻译自: https://blog.frankel.ch/kotlin-collections/

kotlin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值