Итак, я должен использовать SparseArray вместо HashMap ради производительности:
Однако SparseArray
не является частью JCF и не реализует Collection
или List
или Map
. HashMap
, с другой стороны, реализует < a href="http://docs.oracle.com/javase/6/docs/api/java/util/Map.html" rel="nofollow">Map
и предоставляет values()
, с которыми я могу работать, когда мне нужно JCF-совместимое поведение. Например, используя его в ArrayAdapter
и различной пользовательской сортировке (для значений ).
Мой вопрос состоит из трех частей:
- Почему
SparseArray
не реализует JCF интерфейсы? Я имею в виду, какова мотивация не реализовывать эти интерфейсы в свете того факта, что большинство методов уже есть? - Существуют ли альтернативы
SparseArray
, реализующие JCF или могут быть легко преобразованы с сохранениемSparseArray
производительность? - На самом деле
HashMap
с несколькими сотнями элементов настолько медленнее? Действительно ли мои пользователи это заметят?
Я ищу подробные ответы и предпочитаю ссылки на авторитетные сайты. Если вы думаете, что знаете, почему SparseArray
не был реализован с интерфейсами JCF, покажите некоторая поддержка, помогите мне понять. Если вы считаете, что мне следует использовать SparseArray
, покажите мне, как его использовать. с ArrayAdapter
и настраиваемой сортировкой (рекомендуются решения Comparator). Если есть лучшие альтернативы, были бы полезны ссылки на документ API, библиотеку или учебник. Если вы считаете, что мне следует придерживаться HashMap
s , объясните, почему преимущества производительности SparseArray
перевешиваются потребностями интерфейсы.
HashMap
. На самом деле, нет никакого практического способа сделать это — поскольку вы единственный человек на планете, который знает ваше приложение, нам придется принять это за чистую монету. Я игнорирую эти предупреждения? -- если нет практического способа использоватьSparseArray
, у вас, похоже, нет выбора. - person CommonsWare   schedule 23.04.2013HashMap<Integer, Object>
, рассмотритеSparseArray
. Если его использование будет болезненным, используйте Traceview, чтобы определить, сколько времени вы тратите на свое нынешнее решение на основеHashMap
. Если ответ не сильно, то по определениюSparseArray
поможет меньше, чем мало, и переживать не стоит. Что касается предупреждения о Lint, если вы решите придерживатьсяHashMap
, должна быть аннотация@SuppressLint
, которая заблокирует предупреждение. Если вы используете Eclipse, эта аннотация должна быть в списке быстрых исправлений (если нет, это ошибка ADT). - person CommonsWare   schedule 23.04.2013