Вопрос

Многие люди сказали, что ArrayList.removeAll действительно медленный с массивами большого размера.

Этот статья Предоставляет два оптимизированных решения для ArrayList.Removeall Speed, но требует их реализации в самом классе и не может использоваться внешне в качестве исправления.

Есть ли способ применять такого рода исправление, если не менее копировать исходный код ArrayList и использовать мою собственную версию?

РЕДАКТИРОВАТЬ: Полагаю, я должен добавить свою потребность в этом, так как, вероятно, есть способ сделать то, что я хочу без ArrayList.Removeall.

У меня есть два списка вокруг 70,000 longs каждый. Они почти идентичны, но в одном списке есть еще несколько чисел, которых нет во втором списке, и я хочу их найти. Единственный способ, которым я знаю их найти, - это сделать first.removeAll(second) Чтобы найти разницу. Есть другой способ?

Это было полезно?

Решение

Как насчет использования структуры данных, которая имеет гораздо лучшее время удаления, например, хэшсет или деревья? Таким образом, большая причина использования ArrayList заключается в том, что время быстрого доступа O (1) для доступа к записям. Но если вы пытаетесь установить разницу, то, возможно, вам следует использовать наборы. Просто мысль.

Другие советы

Вы можете создать подкласс ArrayList оптимизировать этот метод (и, возможно, другие).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top