Массивы в Kotlin
Что такое массивы?
Массивы — структуры данных с фиксированным размером, хранящие элементы одного типа.
Идеальны для работы с примитивными типами и алгоритмами, требующими высокой производительности.
Создание массивов
Базовые способы
Примеры инициализации
val numbers = arrayOf(1, 2, 3) // Array<Int>
val names = arrayOf("Аня", "Петя") // Array<String>
val emptyArray = emptyArray<String>() // Пустой массив
Примитивные массивы
Оптимизация для примитивов
val intArray = intArrayOf(10, 20, 30) // IntArray
val charArray = charArrayOf('a', 'b') // CharArray
Динамическое создание
Использование лямбд
val squares = Array(5) { i -> (i + 1) * (i + 1) } // [1, 4, 9, 16, 25]
Основные операции
Доступ к элементам
Индексация и изменение
val fruits = arrayOf("Яблоко", "Груша")
println(fruits[0]) // Яблоко
fruits[1] = "Банан" // Теперь массив: ["Яблоко", "Банан"]
Итерация по элементам
Циклы for и forEach
for (fruit in fruits) {
println(fruit)
}
fruits.forEachIndexed { index, value ->
println("$index: $value")
}
Размер массива
Свойство size
println(fruits.size) // 2
Продвинутые методы
Поиск элементов
Примеры
val numbers = intArrayOf(5, 3, 8)
println(numbers.indexOf(3)) // 1
println(numbers.contains(10)) // false
Фильтрация и преобразование
Создание нового массива
val filtered = numbers.filter { it > 4 }.toTypedArray() // [5, 8]
val doubled = numbers.map { it * 2 } // [10, 6, 16]
Сортировка
Изменяет исходный массив
numbers.sort() // [3, 5, 8]
numbers.reverse() // [8, 5, 3]
Особые сценарии
Многомерные массивы
Матрица 3x3
val matrix = Array(3) { IntArray(3) { 0 } }
matrix[1][2] = 5 // Вторая строка, третий столбец
Конвертация в коллекции
Примеры преобразований
val list = numbers.toList() // List<Int>
val mutableList = numbers.toMutableList() // MutableList<Int>
Сравнение массивов
Используйте contentEquals
val a = intArrayOf(1, 2)
val b = intArrayOf(1, 2)
println(a.contentEquals(b)) // true (в отличие от ==)
Важные нюансы
- Фиксированный размер: Нельзя добавить/удалить элементы после создания.
- Примитивы vs Обертки:
IntArray
работает быстрее, чемArray<Int>
(нет боксинга). - Null-безопасность: Для nullable-элементов используйте специальные массивы:
val nullableArray = arrayOfNulls<String>(3) // [null, null, null]
- Передача в Java-код:
IntArray
конвертируется вint[]
,Array<String>
— вString[]
.
Когда использовать массивы?
- Работа с графикой, математическими вычислениями
- Работа с данными, например для базы данных