2016-06-27 3 views
7

У меня есть список около 100 000 сотрудников на Java. Теперь я хочу быстро удалить конкретный объект сотрудника из списка. Каковы возможные способы сделать это без повторения всего списка? (Если я повторяю каждый объект, сравните данные, а затем удалите: этот сценарий занимает много времени)Как удалить определенный объект List в Java?

+0

UR_object_List.remove (объект) –

ответ

7

Вам нужно средство для быстрого поиска объекта. Вы можете

  • имеют ArrayList сортируется, а затем выполнить бинарный поиск с Collections.binarySearch O(log N) Примечание: на самом деле удаления элемента из ArrayList является O(n) Хотя LinkedList, как O(1) для удалить, двоичный поиск на нем будет бессмысленным т.е. намного медленнее, чем O(N)
  • у вас может быть хеш Набор сотрудников вместо этого и удаление будет O(1) амортизировано. Вы можете использовать LinkedHashSet, если хотите сохранить некоторый порядок, например, порядок вставки.
  • вы можете сделать объект изменчивым и иметь поле, подобное enabled, которое вы установили на false вместо фактического его удаления. Вы можете удалить его позже в качестве пакетного задания на некоторое время (на ночь или на выходные)
+1

@TimBiegeleisen SO не является Quora, хотя https://www.quora.com/Is-it-true-that-after-Brexit-Pluto-will-be-a-planet- в-Великобритании-снова;) –

2

Теперь я хочу, чтобы удалить конкретный объект сотрудника из списка ...

Вы можете просто использовать List.remove сделать это

... быстро

на практике, даже хотя удаление элемента может быть операцией O(1), итерация по всей длине списка - O(n), и, как вы подозревали, не очень быстро.

Я чувствую, что ваша проблема лучше обслуживается силой хэш-карты. Это постоянное время поиска и удаления. Класс LinkedHashMap может удовлетворить ваши потребности. Он поддерживает порядок вставки так же, как и связанный список, но также имеет постоянную вставку и удаление времени.

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