Существует два стиля для преобразования коллекции в массив: либо с использованием предварительно заданного размера (например, c.toArray(new String[c.size()])
), либо с использованием пустого массива (например, c.toArray(new String[0])
).
В более старых версиях Java было рекомендовано использование массива с предварительно заданным размером, поскольку вызов отражения, который необходим для создания массива правильного размера, был довольно медленным. Однако после поздних обновлений OpenJDK 6 этот вызов был встроен, что сделало производительность пустой версии массива такой же, а иногда даже лучше, по сравнению с версией предварительного размера. Также передача массива предварительно заданного размера опасна для одновременной или синхронизированной коллекции, поскольку возможна гонка данных между вызовом size и toArray, что может привести к появлению дополнительных нулей в конце массива, если коллекция одновременно сокращалась во время операции.
Вы можете придерживаться единого стиля: либо используя пустой массив (что рекомендуется в современной Java), либо используя массив предварительно заданного размера (который может быть быстрее в более старых версиях Java или JVM, не основанных на HotSpot) .