В настоящее время я работаю над java-программой, которая принимает два канала и распечатывает поездки, которые отсутствуют в одном из каналов или частично в нем. Например, у Feed 1 есть рейс T1 с остановками ABCDE, а у Feed 2 есть рейс T2 с остановками ABCD. Таким образом, T2 является подмножеством T1.
В основном у меня есть один Map<Type, List<Trip>>
для каждого фида. Тип — это тип маршрута (автобус, трамвай и т. д.), а List<Trip>
содержит все поездки этого типа.
Все объекты Trip
имеют поля, указанные здесь. А также ссылка на List<StopTime>
и Service
, которые указывают остановки в отсортированном порядке и время обслуживания во время поездки.
Проверка работает по назначению, и я получаю ожидаемые результаты. Но время работы с большими потоками (40 000 и более поездок) довольно велико, потому что я в основном проверяю каждую поездку из одного списка с другим, что в худшем случае будет O (n ^ 2), если я не ошибаюсь.
Я ищу способ свести к минимуму поездки, на которые я должен смотреть. Одна вещь, которую я мог бы сделать, это переместить проверку, если диапазоны дат поездок перекрываются. В настоящее время это делается при проверке List<StopTime>
внутри объекта Trip
.