内容简介:Nicolas Fränkel is a Developer Advocate with 15+ years experience consulting for many different customers, in a wide range of contexts (such as telecoms, banking, insurances, large retail and public sector). Usually working on Java/Java EE and Spring techn
Nicolas Fränkel is a Developer Advocate with 15+ years experience consulting for many different customers, in a wide range of contexts (such as telecoms, banking, insurances, large retail and public sector). Usually working on Java/Java EE and Spring technologies, but with focused interests like Rich Internet Applications, Testing, CI/CD and DevOps. Currently working for Exoscale. Also double as a teacher in universities and higher education schools, a trainer and triples as a book author.
Unfortunately, I must admit I have a hard time reading the documentation of Scala collections e.g. :
不幸的是,我必须承认我很难阅读Scala集合的文档, 例如 :
trait LinearSeq [+A] extends Seq[A] with collection.LinearSeq[A] with GenericTraversableTemplate[A, LinearSeq] with LinearSeqLike[A, LinearSeq[A]]
Hence, I will only describe collections from the Kotlin side.
Iterator
At the root of Kotlin’s Collection API lies the Iterator interface, similar to Java’s. But the similitude stops after that. java.util.ListIterator features are broken down into different contracts:
-
ListIteratorto move the iterator index forward and backward -
MutableIteratorto remove content from the iterator -
MutableListIteratorinherits from the 2 interfaces above to mimic the entire contract ofjava.util.ListIterator
在Kotlin的Collection API的根源是Iterator接口,类似于Java。但在此之后,相似之处就停止了。java.util.ListIterator 功能分为不同的协议:
-
ListIterator向前和向后移动迭代器索引 -
MutableIterator从迭代器中删除内容 -
MutableListIterator从上面的2个接口继承来模仿整个合同java.util.ListIterator
Collection, List and Set
The hierarchy of collections in Kotlin are very similar as in Java: Collection , List and Set . (I won’t detail maps, but they follow the same design). The only, but huge, difference is that it’s divided between mutable and immutable types. Mutable types have methods to change their contents ( e.g. add() and `set() ), while immutable types don’t.
Of course, the hierarchy is a bit more detailed compared to Java, but that’s expected from a language that benefits from its parent’s experience.
Kotlin 集合类的层次结构和 Java 非常相似: Collection , List 和 Set 。 (我不会详细说明地图,但它们遵循相同的设计)。 唯一但又巨大的区别在于它分为可变类型和不可变类型。 可变类型具有改变其内容的方法( 例如 add() and `set() ),而不 可变类型 则不具有。
当然,与Java相比,层次结构更加详细, 毕竟是基于Java基础之上的。
Implementations
IMHO, the important bit about Kotlin collections is not their hierarchy - though it’s important to understand about the difference between mutable and immutable.
As Java developers know, there’s no such things as out-of-the-box immutable collection types in Java. When an immutable collection is required, the mutable collection must be wrapped into an unmodifiable type via a call to the relevant Collections.unmodifiableXXX() . But unmodifiable types are not public , they are private in Collections : types returned are generic ones ( List or Set interfaces). It means they implement all methods of the standard collections . Immutability comes from the mutable-related methods throwing exceptions: at compile time, there’s no way to differentiate between a mutable and an immutable collection.
On the opposite, Kotlin offers a clean separation between mutable and immutable types. It also provides dedicated functions to create objects of the relevant type:
相反,Kotlin提供了可变类型和不可变类型之间的清晰分离。 它还提供专用函数来创建相关类型的对象:
As opposed to Scala, Kotlin doesn’t implement its own collection types, it reuses those from Java. That means that even when the compile-time type is immutable, the runtime type is always mutable . The downside is that it’s possible to change the collection elements by casting it to the correct runtime type. IMHO, this is no more severe than what allows standard reflection . There are several advantages, though:
-
Faster time-to-market
-
Java collection types benefited from years of improvement
-
The underlying implementation can be changed in the future with full backward compatibility
To go further:
-
Kotlin documentation on collections
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Scala 中的集合(二):集合性能比较
- Scala 中的集合(二):集合性能比较
- 《面试知识,工作可待:集合篇》:Java 集合面试知识大全
- 如何对集合对象求合计,然后追加在该集合对象中
- MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引
- Python 集合相关操作
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
TensorFlow实战
黄文坚、唐源 / 电子工业出版社 / 2017-2-1 / 79
Google近日发布了TensorFlow 1.0候选版,这个稳定版将是深度学习框架发展中的里程碑的一步。自TensorFlow于2015年底正式开源,距今已有一年多,这期间TensorFlow不断给人以惊喜,推出了分布式版本,服务框架TensorFlow Serving,可视化工具TensorFlow,上层封装TF.Learn,其他语言(Go、Java、Rust、Haskell)的绑定、Wind......一起来看看 《TensorFlow实战》 这本书的介绍吧!