Если он пытается использовать Vector
в качестве набора и проверяет наличие записи перед ее добавлением, тогда заполнение вектора становится операцией O (n ^ 2) по сравнению сO (n) для HashSet
.Это также станет операцией O (n ^ 2), если вы вставите каждый элемент в начале вектора, а не в конце.
Если вы просто , используя collection.add(item)
тогда я не ожидал бы увидеть такую разницу - синхронизация не , что медленная.
Если вы можете попробовать протестировать ее с различным количеством записей, вы можете увидеть, как каждаяверсия увеличивается с увеличением n - это облегчило бы понимание того, что происходит.
РЕДАКТИРОВАТЬ: Если вы просто используете Vector.add
, то это звучит так, как будто что-то еще может происходить - например, ваша база данных былавести себя по-разному между различными тестами.Вот небольшое тестовое приложение:
import java.util.*;
public class Test {
public static void main(String[] args) {
long start = System.currentTimeMillis();
Vector<String> vector = new Vector<String>();
for (int i = 0; i < 300000; i++) {
vector.add("dummy value");
}
long end = System.currentTimeMillis();
System.out.println("Time taken: " + (end - start) + "ms");
}
}
Вывод:
Время выполнения: 38 мс
Теперь, очевидно, это будет не очень точно- System.currentTimeMillis
не лучший способ получить точное время - но это явно не занимает 45 минут.Другими словами, вам следует искать проблему в другом месте, если вы действительно просто звоните Vector.add(item)
.
Теперь измените код выше, чтобы использовать
vector.add(0, "dummy value"); // Insert item at the beginning
имеет огромное значение - это 42 секунд вместо 38 мс.Это явно намного хуже - но это еще далеко от 45 минут - и я сомневаюсь, что мой рабочий стол в 60 раз быстрее вашего.