Почему размер массива жестко устанавливается при инициализации?
В большинстве других языков такой дичи нет.
Поэтому массивы Java в принципе бесполезны. Уж лучше вместо них коллекциями пользоваться.
В большинстве других языков такой дичи нет.
Поэтому массивы Java в принципе бесполезны. Уж лучше вместо них коллекциями пользоваться.
> В большинстве других языков такой дичи нет
Неправда.
Практически во всех известных мне (C++, Python и Rust, например) есть массивы фиксированной длины в некотором виде. Их значительно проще реализовывать, чем динамические структуры данных, и издержки при их использовании минимальны. Если у тебя пока не было задачи, в которых статический массив был бы не хуже динамического, это ещё не значит, что таких задач не существует в природе.
Вообще-то, в практически любом компилируемом языке размер массива устанавливается при его создании и дальше не меняется - на то он и массив. Это в динамических языках над массивами поиздевались - позволяя менять их размер.
С другой стороны, в Java размер массива в момент создания задаётся не константой, а произвольным целочисленным выражением:
Scanner in = new Scanner(System.in);
int a[] = new int[in.nextInt()];
Потому никаких проблем не возникает - в любой момент можно создать массив требуемого размера.
во всех языках так. не ври
Массивы менее популярны в Java скорее всего потому, что в реальных задачах тебе еще надо будет иметь возможность преобразовывать данные, что крайне удобно делать через стримы. Ну наверное это как минимум одна из причин. Поэтому проще всегда и везде получать и возвращать коллекции, нежели заниматься перегонкой массива в стрим/коллекцию и обратно. Особенно массивы примитивов - это вообще ад. Ну и конечно в них можно не определять изначальный размер, что тоже достаточно удобно.
Я тебе даже больше скажу. Массивов на самом деле не существует! Компилятор подставляет системные запросы на выделение памяти (например, malloc).