Почему arrayOf() такой же, как mutableListOf(), но ограниченный?

Пытаетесь понять, в чем смысл делать arrayOf() таким же, как mutableListOf(), но удалять такие функции, как add() и remove()?

Вы имеете в виду mutableListOf()?

CommonsWare 19.01.2019 22:11

Да mutableListOf(), отредактировано

Zorgan 19.01.2019 22:11

Похоже, что это является дубликатом вашего вопроса. Есть ли что-то конкретное, что вас интересует, что не рассматривается в этом вопросе и его ответах?

CommonsWare 19.01.2019 22:15

Это хорошее объяснение, спасибо. Таким образом, единственная причина использования массивов - это повышение производительности (ускорение поиска объектов в массиве)? Также я не мог найти преимущество использования List над MutableList?

Zorgan 19.01.2019 22:22

Во многих современных программах мы пытаемся по возможности использовать неизменяемые объекты. Kotlin подчеркивает это (val против var, MutableList против List и т. д.). Неизменяемость имеет много положительных преимуществ (например, два потока могут обращаться к объекту одновременно без конфликтов).

CommonsWare 19.01.2019 22:26

Одна важная вещь в том, как Kotlin реализует метод mutableListOf(), заключается в том, что он создает новый ArrayList. ArrayList просто обертывает обычный Object[], а затем использует метод Arrays.copyOf() для «расширения» размера этого массива, когда это необходимо.

TheWanderer 19.01.2019 22:32

Возможно, вам придется иметь дело с методами, принимающими Array.

Alexey Romanov 20.01.2019 08:50
0
7
431
1

Ответы 1

Они не одинаковы:

arrayOf() внутри создает Array, а mutableListOf()ArrayList.

Какой из них вы выберете, зависит от вашего приложения.

Массив — это структура данных фиксированного размера. Чтобы добавить/удалить значения, вам нужно создать копию старого массива с новыми изменениями (что дорого), но независимо от того, какой у вас большой массив, доступ к элементу имеет постоянную временную сложность. Однако вам нужно сделать это вручную.

С другой стороны, ArrayList также использует массив для внутреннего представления, но предоставляет вам изменяемый интерфейс. Таким образом, добавление/удаление элемента по-прежнему приводит к копированию внутреннего массива, но этот процесс абстрагируется от вас.

Вывод:

  • Если вам нужно инициализировать список один раз, а затем получить к нему доступ, вам следует использовать Array.
  • Если вам нужно добавить/удалить элементы в очень немногих случаях, и большинство из них читает, вам следует использовать ArrayList.
  • Если вам нужно постоянно добавлять/удалять значения, используйте файл LinkedList.

Другие вопросы по теме