Что означает SparseArray - могут быть пробелы в индексах?

Разработка программы, использующей хеш-карту с целыми числами в качестве ключей и объектами в качестве значений. Я продолжаю получать предупреждения Lint, информирующие о том, что SparseArray более эффективен, и когда я читаю о том же, это было дано в этом Ссылка, в индексах могут быть пробелы. Что это на самом деле означает, я не могу понять.

Означает ли это, что если у меня есть такие ключи, как 1,5, 10, то размер массива будет равен 3 с индексами 1, 5, 10. (Или) размер массива будет равен 11 с объектами, присутствующими для индексов 1, 5, 10, а остальные пусты ?

Пожалуйста, проясните меня.


person Suman    schedule 04.01.2013    source источник


Ответы (3)


Это имеет больше смысла, если вы посмотрите на исходный код для SparseArray. Все, что у него есть, — это два массива: один содержит ключи, а другой — значения; так что ваше первое рассуждение верно.

person Oleg Vaskevich    schedule 04.01.2013

Повышенная эффективность SparseArray связана не только с другой структурой (как указывалось в других ответах), но и с тем, что вы избегаете autoboxing при использовании int в качестве ключа.

Другими словами, при использовании, например. map.get(1), вы фактически выполняете эквивалент map.get(Integer.valueOf(1)). То есть вы конвертируете примитив int в экземпляр класса Integer.

С SparseArray такого преобразования типов нет, вы просто используете int. Перейдите по ссылке автобоксинга для более подробной информации.

person mikołak    schedule 04.01.2013

У вас могут быть ключи 1, 5 и 10 из вашего примера, что фактически приводит к SparseArray с длиной 3.

person karllindmark    schedule 04.01.2013