Самым важным отличием между ними является изменчивость .
setOf()
возвращает объект, который реализует интерфейс Set
, но, вероятно, является неизменным (не реализует подинтерфейс MutableSet
) ) и поэтому не могут быть изменены.
(онлайн документы указывают, что это read-only
, что не обязательно обязательно означает неизменность. Но это самый безопасный предположить.)
Не указывает конкретный тип; Вероятно, это позволит изменить его в будущем, чтобы повысить производительность, использование памяти и / или подобное. Даже сейчас он может вернуть kotlin.collections.EmptySet
, java.util.Collections.SingletonSet
или kotlin.collections.LinkedHashSet
; последний имеет более быструю (и предсказуемую) итерацию по сравнению со стандартным HashSet
.
Так что setOf()
предназначен для случаев, когда вам нужен эффективный неизменный набор, и вам не нужен точный тип.
hashSetOf()
, с другой стороны, всегда возвращает kotlin.collections.HashSet
(или подкласс), который всегда изменчив. Это для случаев, когда вам нужен этот конкретный тип.
И если вы хотите непостоянный набор, но не заботитесь о точном типе, вам лучше всего позвонить mutableSetOf()
.
(В общем, конечно, лучше не указывать конкретные типы, когда вам это не нужно; это делает ваш код гибким.)