2012-04-04 2 views
1

У меня есть куча Thingy объектов, которые я отслеживаю с использованием идентификационных номеров long. Поскольку у меня нет гарантий относительно последовательности ID, я держу их в HashMap<Long, Thingy> для произвольного доступа. Тем не менее, в Android у них есть этот очень классный класс SparseArray, который, по их утверждению, быстрее, чем у моего HashMap за то, как я его использую. Возможно, наиболее заметно, что у него нет налога на аутобоксинг. К сожалению, эти ключи являются int, а не long.Является ли литье долго int int дешевле, чем autoboxing долго Long?

Значения моих идентификаторов long таковы, что я не беспокоюсь о переполнении диапазона int в любое время в этом столетии. Это отливка от long до int plus SparseArray Оптимизация будет дешевле, чем автооблок long до Long для моих HashMap операций? Моя интуиция говорит «да», но мне хотелось бы получить дополнительную информацию.

+0

Это было задано здесь. См. Http://stackoverflow.com/questions/3430671/performance-impact-of-autoboxing – TechTrip

ответ

3

Um. Кастинг long до int, вероятно, будет быстрее, да, но неясно, будет ли это правильным.

+0

Правильность вещь вряд ли заводит его голову, но я, конечно, знаю о возможности. Тем не менее изменение типа идентификатора будет влиять на множество мест. BLEH. Наверное, сейчас я оставлю это в покое. Он работает достаточно хорошо. – Argyle

1

Кастинг long до int будет определенно быстрее, так как это только одна команда JVM (l2i), противоположная распределению памяти и созданию нового объекта при использовании бокса, но, как указал Луи, вы теряете точность. Если вы уверены, что ваши значения id находятся в диапазоне int, вы, вероятно, будете в безопасности, но я бы не пошел с такими предположениями.

Что я хотел бы сделать, это исследовать возможность скопировать этот класс SparseArray из Android-источников и изменить его, чтобы использовать ключи long. В настоящее время я смотрю на это и на первый взгляд, что, безусловно, возможно.

+0

Мысль пришла ко мне. – Argyle

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