首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素如何存储在集合中?

元素如何存储在集合中?
EN

Stack Overflow用户
提问于 2014-03-20 22:13:19
回答 2查看 234关注 0票数 2

我熟悉Java集合的实现,并试图了解如何在Scala中实现集合。

Scala的集合最终会包装Java集合吗?什么是ArrayList在Scala中的等价物?Java中的ArrayList包含一个包含数组*的变量elementData。这种实现在Scala中类似的类/特性中吗?Scala中的可增长集合是如何实现的?

太好了,亚历山大

*

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-20 22:22:40

Scala集合有一个概述文件

基本上,这些是直接用Scala编写的结构,而不是现有Java集合的包装器,尽管可以使用JavaConverters对象在Scala中包装Java集合。

Scala提倡不可变的数据结构,这些数据结构在涉及并发性时更容易推理,而标准的Java集合是可变的。java.util.ArrayList的通信可能是scala.collection.mutable.Buffer。默认的缓冲区实现是ArrayBuffer,它还使用内部可以动态增长的数组。

票数 1
EN

Stack Overflow用户

发布于 2014-03-20 22:22:49

1)不,Scala集合是独立于Java集合实现的。但是,有一种方法可以将Java集合包装到Scala集合接口,这样您就可以使用Scala来理解它们和它们上的其他方法。这里描述了从Scala转换到Java的旧方法,反之亦然。

现在,您可以按照链接中的描述导入JavaConversions,然后在集合上调用asJavaasScala,这取决于您需要哪个方向。

2) ArrayListArrayBuffer apply (Java get)、update (Java set)和+= (Javaadd)的复杂度方面与Java等价。

3) ArrayBuffer扩展了其他几个集合使用的ResizeableArray实用程序类。据我所知,该类中的私有数组字段称为array0,但操作它的逻辑与elementData相同。

ArrayBuffer的保证是摊销的O(1) +=方法,这意味着当基础数组需要调整为更大的数组时,只有偶尔更新才会花费O(n)。预置元素是一个O(n)操作,并将它们插入中间。

ArrayBuffer操作中,底层数组永远不会缩小,即一旦数组缓冲区增长到一定大小,然后所有元素都被删除,它仍将占用相同数量的内存。即使您在上面调用clear,也是如此。

4)可增长集合是实现特征Growable的所有集合。此特性定义了向其添加元素的方法+=。该方法的确切语义取决于集合是集合(在这种情况下,元素是添加到集合)、序列还是链接集/映射(在这种情况下,元素之间有顺序,因此元素只是添加到末尾),还是其他的东西。如何实现可增长的集合取决于从一个集合到另一个集合。这是一个很好的Scala集合概述

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22546268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档