Здравствуйте, не стану объяснять в чём смысл всего этого кода, и сразу приступлю к проблеме.
Если bar - ArrayList, то операция завершается за 22 секунд, С LinkedList >30 сек. Есть ли другие варианты проверять наличие значения в массиве?
Производительность для меня очень важна :)
Есть код:
final long time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
foo("test");
}
final long endTime = System.currentTimeMillis();
System.out.println("Time: " + (endTime - time) + " ms");
Метод foo:
public static boolean foo(String s){
/*Всякий код*/
return bar.contains(s);
}
Ответ
Используйте HashSet.
ArrayList: 14475 ms
HashSet: 43 ms
Sorted ArrayList: 540 ms
Код:
long time = 0;
ArrayList
time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
strings.contains("test");
}
long endTime = System.currentTimeMillis();
System.out.println("ArrayList: " + (endTime - time) + " ms");
HashSet
Collections.sort(strings);
time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
Collections.binarySearch(strings,"test");
}
endTime = System.currentTimeMillis();
System.out.println("Sorted ArrayList:" + (endTime - time) + " ms");
Комментариев нет:
Отправить комментарий