понедельник, 15 июля 2013 г.

Коллекции в Java: Когда какие использовать.

Итак, продолжая ковыряться с коллекциями, решил рассмотреть из интернета данные по поводу, когда какую коллекцию стоит применять и натолкнулся на следующие данные: 

Тип коллекции Функциональность Типичное применение
List (Списки)
  • Применяются как массивы переменной длины (удвоение при переполнении)
  • Можно удалять-вставлять элементы в произвольной позиции.
  • Есть порядок элементов.
  • Можно применять в большинстве случаев, когда надо хранить данные куском и пробегать по нему. (капитан очевидность в посте)
Set (Множества)
  • Когда вы добавляете элемент в множество, таких понятий как порядок элементов или одинаковые элементы  – не существует.
  • Можно применять, когда надо запомнить какие элементы вы уже обработали.
  • Можно юзать, чтобы запоминать ответы типа “да-нет”. То бишь, храните о предмете множество ответов, а потом пробегаете по нему и делаете какой-нибудь умный десишн. (решение выносите, для танкистов)
Map (Отображение)
  • Классика – key-value пары. Они же словари.
  • Конечно же наши любимые словари можно использовать для запоминания, какому ID соответствует какое имя пользователя, какому дню какое количество тренировок и так далее.
Queue (Очередь)
  • Тоже самое, что списки, но теперь можно стучаться только с концов списка, без произвольного доступа. 
  • Слышал, что ArrayDeque - самая быстрая коллекция. 
  • Можно юзать для задач планирования разнообразных, для обхода структур с иерархией, типо папок (Алгоритм поиска в ширину использует очередь, а А* – очередь с приоритетом)

По сути, это перевод таблицы с http://www.javamex.com/tutorials/collections/how_to_choose.shtml. Честно говоря, не очень нравится мне она. Нашел еще один список use-case. https://dl.dropboxusercontent.com/u/3975965/Java%20Collection%20Matrix.pdf – выглядит значительно круче, но и букв очень много. Вообще говоря, в зависимости от задачи надо выбирать всё это дело. Более того, зачастую в рамках одной задачи можно использовать различные структуры данных на разных уровнях декомпозиции - имейте это в виду.

P.S. Натолкнулся на иерархию коллекций:

Комментариев нет:

Отправить комментарий