2016-03-07 4 views
3
int[] array = new int[10]; // Length is fixed when the array is created. 

Длина массива устанавливается при создании массива. После создания его длина фиксирована.Почему Java массивы фиксированной длины?

Почему это должно быть так?

+2

потому что он был спроектирован таким образом. Если вы хотите динамически изменять размер, используйте коллекцию. – Stultuske

+0

Он был спроектирован так ... хорошо, но почему? –

+0

Каково ваше мнение об этом? –

ответ

1

Именно в определении Java array с:

Массив представляет собой объект-контейнер, который содержит определенное количество значений одного типа

(см here).

Используйте массив ArrayList для реализации массива переменного размера.

4

Как и другие ответы, фиксированный размер является частью определения, и вам придется поговорить с оригинальными авторами, чтобы найти правду.

Но, как правило, значительно сложнее реализовать контейнер переменной длины, и для его достижения под капотом существует ряд стратегий (связанный список, перераспределение памяти ...).

Если бы авторы определены массивы быть переменной длины, еще в начале 1990-х годов, было бы несколько нежелательных последствий:

  • ядро ​​определение JVM массивов будет гораздо более сложным, и все реализации будет быть вынужденными обеспечить эту сложность на низком уровне;
  • в данной JVM было бы реализовано изменение размера для одного размера, что может не удовлетворять многим прецедентам;
  • Различные реализации, вероятно, приведут к большим отклонениям производительности, которые могут потребовать дополнительного сложного определения ограничений;
  • вводит проблемы безопасности потока вокруг границ - проверка массива, потому что a.length становится изменяемым;
  • дополнительная лингвистическая поддержка для выражения расширения => более крупный язык;
  • Последствия для индексирования массива, потенциальная нехватка O (1) индексации;
  • незнакомая территория для программистов на С и С ++, которые используются для нерасширяемых массивов (или имеющих такие механизмы, предоставляемые в библиотеках);
  • литье в камне механизм переменной длины, который уже надлежащим образом обрабатывается структурами более высокого уровня (java.util.Vector еще в тот же день, а теперь сборники Java, Guava и т. Д.).

Подводя итог, массивы в семействе языков C, из которых родилась Java, в целом считаются простыми инструментами для построения структур более высокого уровня. В то же время в ограничении фиксированного размера не было сюрпризов. Теперь у нас есть выбор реализаций таких структур (LinkedList, ArrayList и т. Д.), Которые обеспечивают выбор поведения во время выполнения, и большинство разработчиков используют эти абстракции.

Смежные вопросы