Какова легковесная непараллельная реализация Java в Iterable? - PullRequest
1 голос
/ 13 октября 2009

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

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

Ответы [ 4 ]

5 голосов
/ 13 октября 2009

ArrayList. Из Javadoc

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

2 голосов
/ 13 октября 2009

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

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

1 голос
/ 13 октября 2009

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

0 голосов
/ 13 октября 2009

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

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

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

...