Меня немного смущает вопрос о том, что такое большая буква O для такого примера (это не настоящий язык программирования, просто быстрый пример):
for each entry in arraylist1
for each entry in arraylist2
if condition met
remove element from arraylist2
Даже если этот код имеет два цикла, я не думаю, что это O (n ^ 2), поскольку для каждой записи я могу удалить n элементов, что значительно сократит количество итераций.
Обычно я использую этот тип алгоритма, когда я уже обработал или нашел элементы в массиве по заданным критериям, но необходимо продолжить.
Редактировать: Теперь, когда я думаю, в худшем случае удаляются только все элементы на последней итерации первого цикла, что приводит к «истинному» O (n ^ 2).