2017-02-20 2 views
-2

Я посмотрел на некоторые реализации Collections и заметил, что нет коллекции, которая возвращает свой базовый массив (например ArrayList) в O (1), правильно?Коллекция Java, которая поддерживает toArray() в O (1)?

Мне нужна структура данных, которая может возвращать toArray() в O (1). это для целей только для чтения, есть ли что-нибудь подобное?

+0

Это было бы возможно только в том случае, если он вернул живой массив, что сделало бы его полностью небезопасным. Вам, вероятно, придется строить его самостоятельно. – shmosel

ответ

2

Javadoc метод уточняется, что:

Возвращаемый массив будет «безопасным» в том, что нет ссылок на него не поддерживаются этой коллекции. (Другими словами, этот метод должен выделять новый массив, даже если эта коллекция поддерживается массивом). Таким образом, вызывающий абонент может изменять возвращаемый массив. [link]

Так не соответствующая реализация не будет делать то, что вы хотите (и я не знаю ни реализаций, которые не соответствуют этому требованию). Обратите внимание, что если коллекция не имеет фиксированного размера (например, коллекции, возвращенные java.util.Arrays.asList), в любом случае вряд ли будет иметь массив поддержки точно такого же размера. (Например, у ArrayList обычно будет массив поддержки, который больше, чем необходимо, чтобы иметь место для дешевого роста.)

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