2009-10-13 2 views
1

Мне нужен класс, который реализует Iterable и не должен быть безопасным для одновременного использования. Из различных вариантов, таких как LinkedList, HashSet, ArrayList и т. Д., Который является самым легким?Какова самая легкая несовпадающая реализация Iterable в Java?

Чтобы уточнить прецедент, мне нужно добавить несколько объектов в Iterable (обычно 3 или 4), а затем что-то еще нужно перебрать по нему.

+0

Что означает легкий вес? Как вы измеряете вес? –

+0

Каковы ваши результаты теста? – starblue

ответ

5

ArrayList. Из Javadoc

Операция add работает в режиме амортизированного постоянного времени, то есть для добавления n элементов требуется время O (n). Все остальные операции выполняются в линейном времени (грубо говоря). Постоянный коэффициент невысок по сравнению с константой для реализации LinkedList.

+0

ArrayList - рабочая лошадка. Для еще меньшего веса используйте конструктор, чтобы указать правильную емкость, когда это возможно. – erickson

+1

ArrayList также должен быть хорошим w.r.t. кэш. – starblue

2

Это полностью зависит от того, что вы подразумеваете под «самым легким весом». Какие операции вам нужно делать, и как часто? Вы знаете окончательный размер заранее? Вы пытаетесь сохранить время выполнения или память?

Я согласен с тем, что zkarthik очень часто выбирает ArrayList ... но он будет вести себя очень плохо, если вы хотите создать большую коллекцию, а затем многократно удалите первый элемент, например. Есть веская причина, что существует так много разных коллекций: у них разные характеристики производительности для разных ситуаций.

1

Все они имеют очень разные функции и поведение, поэтому вы должны основывать свой выбор на том, как вы будете их использовать. Например, для произвольного доступа и высокой локальности используйте ArrayList; если вам нужна быстрая неупорядоченная вставка и запрос, используйте HashSet.

0

Если «легкий» означает «лучшая производительность», то вопрос почти невозможно ответить, не понимая, как будет использоваться коллекция. Все, что вы сказали нам, так и для, что она не нуждается в поддержке одновременного использования, но для того, чтобы иметь надежду на ответе на вопрос, который мы должны были бы знать такие вещи, как

  • Сколько объектов будет хранятся в коллекции (в среднем)
  • Какова относительная частота чтения и запись доступ
  • является ли случайный доступ требуется
  • заказан требуется доступ

ряд людей предложил ArrayList может быть Лучший. Тем не менее, я, кажется, вспоминаю чтение (возможно, в Effective Java 2nd edition), что для определенных моделей использования Queue работает лучше, чем List, потому что это не приводит к штрафу за произвольный доступ. Другими словами, вы можете добавлять/удалять элементы из списка в любом порядке, но вы можете добавлять или удалять только элементы в очереди в определенном порядке (т. Е. Добавлять к хвосту и удалять из головы).

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