Предположим, что в списке один есть m элементов, а список два имеет n элементов, m> n. Если элементы не численно упорядочены, кажется, что они не являются, общее количество шагов сравнения - это стоимость метода-фактора mxn-n^2/2. В этом случае коэффициент затрат составляет около 50000x49999.
Сохранение обоих списков будет оптимальным решением. Если списки упорядочены, стоимость их сравнения будет равна коэффициенту m. В этом случае это около 50000. Этот оптимальный результат будет достигнут, когда оба списка будут повторяться с помощью двух курсоров. Этот метод может быть представлен в коде следующим образом:
int i=0,j=0;
int count=0;
while(i<List1.size() && j<List2.size())
{
if(List1[i]==List2[j])
{
count++;
i++;
}
else if(List1[i]<List2[j])
i++;
else
j++;
}
Если это возможно для вас, чтобы держать списки заказали все время, этот метод будет сделать разницу. Также я считаю, что невозможно разделить и сравнить, если списки не упорядочены.
«HashSet» содержит только ** одно значение **, в вашем случае «Long» вы храните. –
Извините, увидел 'HashSet' и прочитал' HashMap'. И поскольку он ищет дубликатов, удаление дубликатов в одном списке не является проблемой. –
Не будет ли это ближе к 'l1 + (l2 * log (l1))', поскольку поиск каждого элемента 'l2' в' l1' займет 'O (log (l1))' –