Оптимизация ArrayList.removeAll - PullRequest
9 голосов
/ 24 июля 2011

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

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

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

Редактировать: я полагаю, мне нужно добавить мою потребность в этом, поскольку, возможно, есть способ сделать то, что я хочу, без ArrayList.removeAll.

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

Ответы [ 2 ]

9 голосов
/ 24 июля 2011

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

1 голос
/ 24 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...