Если вы обнаружите, что в интерфейсе есть метод определения:
public String [] getParameters ();
Тогда вы должны отразить всерьез. Массив не только старый модный, но у нас есть разумные причины, чтобы избежать воздействия. В этой статье я постараюсь подвести итоги дефектов массива в Java API. Начните с одного из самых неожиданных примеров.
Массив приводит к плохой производительности
Вы можете подумать, что использование массивов является самым быстрым, потому что массив является основной структурой данных, реализованной большинством коллекций. Как использование группы чистых чисел ниже, чем использование объекта массива?
Давайте начнем с этого общего использования привычки, которое выглядит знакомо:
Public String [] getNames () {return nameslist.toarray (new String [nameslist.size ()]);} Этот метод создает данные из сбора переменных, где используются его внутренние данные о сохранении медленнее (см. Грин против оранжевого бара в графике):
public String [] getNames () {return nameslist.toarray (new String [0]);} Однако, если метод возвращает список, создание оборонительной копии происходит быстрее (Red Bar):
Public List <string> getNames () {return new ArrayList (nameslist);} Разница в том, что ArrayList поместил свой элемент данных в массив объекта и использует тип метода Toarray, который намного быстрее, чем тип метода (Blue Bar) Нет типа массива, инкапсуляция инкапсулируется в общем типе компилятора.
Эта значка показывает эталонный стандарт для n = 5 на Java 7. Однако больше элементов данных или другой системы ситуации с виртуальной машиной, эта картина не будет слишком сильно измениться. Преобразован в коллекцию, чтобы использовать его для чего -либо, а затем преобразовать результат обратно в массив, чтобы отправить его в другой метод интерфейса, так и так далее.
Он использует простой список вместо массива, чтобы улучшить производительность байты.
Используя коллекцию, вы можете даже решить вернуть немодифицированную версию внутреннего списка:
Public List <string> getNames () {return Collections.unmodifiablelist (nameslist);}Эта операция будет работать по фиксированной рыночной цене, поэтому он намного быстрее, чем любой другой метод (желтая полоса). Невозможно изменить изменение, изменится при изменении внутренних данных. Если происходит изменение, клиент работает в ConcurrentModification Exception, когда итерационные данные. , это будут высокопроизводительные выборы, которые не могут быть реализованы массивами.
Массив определяет структуру, а не интерфейс
Java -это объект -ориентированный язык. Основная концепция объекта -Ориентация -предоставить некоторые методы для доступа и управления их данными вместо непосредственного использования домена данных.
Поскольку Java разработала производительность, нативные типы и массивы были интегрированы в систему типов. Прямого доступа у вас не так много других вещей в массиве.
String [] array = {"foo", "bar"}; Println (массив); "," Bar "}) // -> falseВ отличие от массива, API сбора предоставляет много полезных методов для доступа к элементам. и сохранить принцип реализации одновременно.
Используя данные, вы определяете, где хранится данные в памяти.
Массив не является безопасным типом
Если вы полагаетесь на тип проверки компилятора, будьте осторожны с массивом объектов.
Number [] numbers = new Integer [10];
Причина в том, что массив «совместный». Охватывая все теории и все теории, каждый разработчик Java должен прочитать.
Из -за этого поведения граница раздела экспонированного типа массива позволяет подготовить заявление типа массива, что вызывает странную аномальность времени выполнения.
Блох также объяснил, что массив не совместим с общим типом.
-Джошуа Блок, Эффективная Java (2 -е издание), статья 29
Суммировать
Языковая структура нижнего уровня массива и будет использоваться в реализации, но они не должны думать о воздействии других классов. Полем