SetOf listOf mapOf записи аналогичны? Строка 1 -> setOf(this[0])?
1) Вопрос:
val list:List = listOf()
В реализации создания я увидел строки:
public fun listOf(vararg elements: T): List = if (elements.size > 0) elements.asList() else emptyList()
если перейти дальше, то:
public actual fun Array.asList(): List {
return ArraysUtilJVM.asList(this)
}
и так в конце концов дохожу до такой реализации:
public static List asList(T... a) {
return new ArrayList<>(a);
}
То есть, получается что эти 2 записи аналогичны? :
val list:List = listOf() и val list:List = ArrayList() эти записи аналогичны?
И карты, и множества, созданные таким же способом, тоже аналогичны следующим записям? :
val map:Map = mapOf() и val map:Map = LinkedHashMap()
val set:Set = setOf() = val set:Set =LinkedHashSet()
То есть я могу сказать что listOf создает ArrayList интерфейса List, mapOf создает LinkedHashMap интерфейса Map и setOf создает LinkedHashSet интерфейса Set ?
2) Вопрос:
Зайдя в реализацию setOf есть строка: if (elements.size > 0) elements.toSet() и зайдя в toSet() есть такая реализация:
public fun Array.toSet(): Set {
return when (size) {
0 -> emptySet()
1 -> setOf(this[0])
else -> toCollection(LinkedHashSet(mapCapacity(size)))
}
}
Что значит строка 1 -> setOf(this[0])? То есть, если val set = setOf(1), то внутри setOf создастся emptySet() что ли?
И только если размер setOf больше 1, то только тогда создастся LinkedHashSet?
Когда вы пишите listOf() вы вызываете функцию которая каким-то магическим образом создаёт вам список, а ArrayList() - вызов конструктора конкретного класса.
В данный момент, метод listOf реализован с помощью ArrayList, но не исключено, что в будущем могут быть использованы другие типы коллекций, более эффективные по памяти за счёт своей неизменности.
Т. е. все эти функции введены для удобства абстрагирования интерфейса от реализации.
1. В текущей реализации именно так - listOf() создает ArrayList. Остальные методы создания экземпляров коллекций - аналогично.
ссылка на документацию https://kotlinlang.ru/docs/reference/collections.html : В данный момент, метод listOf реализован с помощью ArrayList, но не исключено, что в будущем могут быть использованы другие типы коллекций, более эффективные по памяти за счёт своей неизменности.
2. Строка 1 -> setOf(this[0]) означает, что для создания будет вызвана функция
public fun setOf(element: T): Set = java.util.Collections.singleton(element)
из пакета kotlin.collections.