每种应该使用和何时使用有HashSet
什么区别?Set
这是Map
vs HashMap
:
val hashSet = HashSet("Tomatoes", "Chilies")
val set = Set("Tomatoes", "Chilies")
set == hashSet // res: Boolean = true
每种应该使用和何时使用有HashSet
什么区别?Set
这是Map
vs HashMap
:
val hashSet = HashSet("Tomatoes", "Chilies")
val set = Set("Tomatoes", "Chilies")
set == hashSet // res: Boolean = true
Set
是一种特质。Set
您可以通过调用其伴随对象的方法来创建 a 的实例,该apply
方法返回默认的 immutable 实例Set
。例如:
val defaultSet = Set("A", "B")
HashSet
是 a 的具体实现Set
,可以如下实例化:
val hashSet = HashSet("A", "B")
看看“Programming in Scala”中的引用,它解释了各种实现之间的差异:
scala.collection.mutable.Set()
例如,工厂方法返回 a ,scala.collection.mutable.HashSet
它在内部使用哈希表。同样,scala.collection.mutable.Map()
工厂返回一个scala.collection.mutable.HashMap
.不可变集合和地图的故事更复杂一些。例如,工厂方法返回的类
scala.collection.immutable.Set()
取决于您传递给它的元素数量,如下表所示。对于少于五个元素的集合,使用专门用于每个特定大小的集合的特殊类,以最大限度地提高性能。但是,一旦您请求一个包含五个或更多元素的集合,工厂方法将返回一个使用哈希尝试的实现。
Number of elements Implementation
0 scala.collection.immutable.EmptySet
1 scala.collection.immutable.Set1
2 scala.collection.immutable.Set2
3 scala.collection.immutable.Set3
4 scala.collection.immutable.Set4
5 or more scala.collection.immutable.HashSet
这意味着对于Set
具有 5 个或更多元素的不可变对象,您的两个调用都应返回同一Set
子类的实例。
s也是如此Map
。请参阅此链接。
当您调用Set
orMap
函数时,您实际上是在调用or对象的.apply
方法。这些是工厂方法,它们选择 Rarry 的答案中记录的适当类型。相反,当您直接实例化 HashSet 时,您是在自己做出选择。Set
Map