Похоже, вы задаете вопрос XY (http://xyproblem.info/). Вы действительно хотите знать, как написать readStars
наиболее эффективным способом, но вместо этого вы спрашиваете о HashSet
. Я думаю, что @ mfulton26 также отвечает на ваш вопрос в зависимости от того, что задается.
Вот ответ на «как я пишу это наиболее эффективным образом:»
У вас есть два варианта. Во-первых, версия, которая автоматически закрывает поток в конце:
fun BufferedReader.readStars(n: Int): Set<Star> {
return use {
lineSequence().map { line ->
val idx = line.indexOf(' ')
Star(line.substring(0, idx).toInt(), line.substring(idx + 1).toInt())
}.toSet()
}
}
И во-вторых, версия, что это не так:
fun BufferedReader.readStars(n: Int): Set<Star> {
return lineSequence().map { line ->
val idx = line.indexOf(' ')
Star(line.substring(0, idx).toInt(), line.substring(idx+1).toInt())
}.toSet()
}
Ни версия создает массив, и не они делают копии данных. Они передают данные через последовательность, которая создает набор и заполняет его напрямую.
Другие ноты
Нет необходимости использовать раскол, если вы действительно обеспокоены распределения и производительности. Просто используйте indexOf(char)
и разделите строку самостоятельно, используя substring
.
Если вы раскол, то, пожалуйста, используйте split(char)
не split(String)
когда вы хотите разделить на char
Похоже, вы задаете XY вопрос (http://xyproblem.info/). Вы скорее спросите, как наиболее эффективно использовать свою функцию 'readStars'? –
Я ответил, что ваш вопрос представляется (X) вместо 'HashSet' (Y), см. Новый ответ ниже. –
Вы пытались создать «HashSet» самостоятельно? Как "val mySet = HashSet (...)'? Если это так, вы уже знаете, как создать 'HashSet'. Вы не показали, что вы уже пробовали в своем вопросе, так что это сбивает с толку, потому что любой может создать «HashSet», если они захотят. Без Kotlin stdlib. stdlib добавит только вспомогательную функцию, чтобы сделать ее более согласованной с стилем Kotlin, но она не добавляет 'HashSet' к доступным параметрам. –