Изменяемые и неизменяемые реализации Scala HashSet
- это конкретные классы, которые вы можете создавать.Например, если вы явно запросите новый scala.collection.immutable.HashSet
, вы всегда получите набор, который реализован с помощью хеш-функции.Существуют другие реализации набора, такие как ListSet
, который использует список.
Set
- это признак , который расширяется всеми реализациями набора (тогда как в Java Set
интерфейс).
Set
также является сопутствующим объектом * с методом apply
**.Когда вы вызываете Set(...)
, вы вызываете этот фабричный метод и получаете возвращаемое значение, которое является своего рода Set
.Это может быть HashSet
, но может быть и другая реализация.Согласно 2 , реализация по умолчанию для неизменяемого набора имеет специальное представление для пустого набора и устанавливает размер до 4. Неизменяемые наборы размером 5 и выше, а все изменяемые наборы используют hashSet.1021 ** В Scala вместо статических методов класса вы можете создать синглтон object
с тем же именем, что и ваш класс или черта.Это называется сопутствующим объектом, и методы, которые вы определяете для него, могут называться ObjectName.method()
, подобно тому, как вы вызываете статический метод в Java.
**Set(x)
является синтаксическим сахаром для Set.apply(x)
.