首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么scala中不存在类集?

为什么scala中不存在类集?
EN

Stack Overflow用户
提问于 2016-08-31 10:40:02
回答 2查看 234关注 0票数 0

继承特征集的类有很多。HashSet、TreeSet等

还有一个对象(我可以称它为特征集的伴生对象吗?不是在类集合的情况下?)集合和特征集合。

在我看来,只需在这个列表中再添加一个类"Set“,就可以很容易地理解它的结构。

有没有什么理由不应该存在Class Set?

EN

回答 2

Stack Overflow用户

发布于 2016-08-31 14:19:51

如果你只需要一个集合,使用Set.apply,你将拥有一个支持所有重要操作的有效集合。你不需要担心它是如何实现的。它准备好在大多数用例中很好地工作。

另一方面,如果某些操作的性能对您来说很重要,那么为set的具体实现创建一个具体的类,您就会确切地知道您拥有什么。

在java中,你可以这样写:

代码语言:javascript
复制
Set<String> strings = new HashSet<>(Arrays.asList("a", "b"));

在scala中,您也可以使用这些类型

代码语言:javascript
复制
val strings: Set[String] = HashSet("a", "b")

但是,如果不需要担心类型,也可以使用方便的工厂,只需使用

代码语言:javascript
复制
val strings = Set("a", "b")

这没有什么错,我看不出添加另一个类会有什么帮助。有一个接口/特征和具体的实现是很正常的事情,中间不需要任何东西,也不会有什么帮助。

Set.apply是sets的工厂。您可以使用getClass检查结果对象的实际类。这个工厂为0-4的大小创建特殊的、优化的集合,例如

代码语言:javascript
复制
scala.collection.immutable.Set$EmptySet$
scala.collection.immutable.Set$Set1
scala.collection.immutable.Set$Set2

对于更大的集合,它是一个哈希集,即scala.collection.immutable.HashSet$HashTrieSet

票数 4
EN

Stack Overflow用户

发布于 2016-08-31 13:36:26

在Scala中,类和特征之间没有重叠。类是可以实例化的实现,而特征是可独立混合的接口。Set.apply的使用提供了一个具有接口集的对象,这就是使用它所需了解的全部内容。我完全理解想要一个具体的类型,但那是不必要的。正确的做法是将其保存到Set类型的val中,并只使用Set提供的接口。

我知道这可能不能令人满意,但是给它一点时间,Scala类型的系统本身就会有意义,即使这与Java所做的不同。

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

https://stackoverflow.com/questions/39239923

复制
相关文章

相似问题

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