Java

Почему размер массива жестко устанавливается при инициализации?

В большинстве других языков такой дичи нет.
Поэтому массивы Java в принципе бесполезны. Уж лучше вместо них коллекциями пользоваться.
Николай Дусов
Николай Дусов
21 258
> В большинстве других языков такой дичи нет

Неправда.
Практически во всех известных мне (C++, Python и Rust, например) есть массивы фиксированной длины в некотором виде. Их значительно проще реализовывать, чем динамические структуры данных, и издержки при их использовании минимальны. Если у тебя пока не было задачи, в которых статический массив был бы не хуже динамического, это ещё не значит, что таких задач не существует в природе.
Beerudaf Beerudaf
Beerudaf Beerudaf
36 956
Лучший ответ
Вообще-то, в практически любом компилируемом языке размер массива устанавливается при его создании и дальше не меняется - на то он и массив. Это в динамических языках над массивами поиздевались - позволяя менять их размер.

С другой стороны, в Java размер массива в момент создания задаётся не константой, а произвольным целочисленным выражением:

Scanner in = new Scanner(System.in);
int a[] = new int[in.nextInt()];

Потому никаких проблем не возникает - в любой момент можно создать массив требуемого размера.
Николай Дусов А ещё лучше пользоваться коллекциями, а немного возросшей нагрузкой на процессор и память можно пренебречь.
Я тебе даже больше скажу. Массивов на самом деле не существует! Компилятор подставляет системные запросы на выделение памяти (например, malloc).
Д*
Дмитрий *****
26 551
Николай Дусов На самом деле ничего не существует - есть только нолики и единички.
Массивы менее популярны в Java скорее всего потому, что в реальных задачах тебе еще надо будет иметь возможность преобразовывать данные, что крайне удобно делать через стримы. Ну наверное это как минимум одна из причин. Поэтому проще всегда и везде получать и возвращать коллекции, нежели заниматься перегонкой массива в стрим/коллекцию и обратно. Особенно массивы примитивов - это вообще ад. Ну и конечно в них можно не определять изначальный размер, что тоже достаточно удобно.
Дмитрий Зайков
Дмитрий Зайков
13 926
во всех языках так. не ври
Женя Ким
Женя Ким
5 846