У меня есть ситуация, при которой я заполняю ArrayList
«TransactionEvent
». TransactionEvent
имеет свойство «идентификатор транзакции». В большинстве случаев каждое новое событие имеет идентификатор транзакции, превышающий идентификатор предыдущего события. Однако это не гарантируется; то есть данные почти отсортированы.Эффективный поиск в списке
Мой вопрос: как я могу выполнять быстрый поиск на основе идентификатора транзакции? Моя нынешняя идея - позвонить Collections.binarySearch(...)
, и если это не удается, выполните линейный поиск. Тем не менее, я заметил, что Javadoc утверждает, что результат binarySearch не определен, поскольку данные неупорядочены, поэтому мне, возможно, придется выполнить собственную реализацию.
Дополнительно:
- Я попытался с помощью карты индекса -> идентификатор транзакции, но этот подход является ошибочным, потому что всякий раз, когда элемент списка обновляется/удален Я должен восстановить всю карту; т. е. любые выгоды стираются этим.
- Это не случай преждевременной оптимизации:
List
является основой дляTableModel
, который в настоящее время выполняется очень медленно, когда содержит большое количество строк (100 000).
Любая помощь оценивается.
ли это должно быть ArrayList? например можете ли вы хранить идентификаторы транзакций в HashSet? – nos
Да, это должно быть так, как мне нужно быстрый поиск по произвольному доступу на основе индекса строки, а также идентификатора транзакции (поскольку этот список находится под таблицейModel). – Adamski