Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Лучший и быстрый вариант проверить наличие текста в массиве

#java #производительность


Здравствуйте, не стану объяснять в чём смысл всего этого кода, и сразу приступлю
к проблеме.

Если 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);
}

    


Ответы

Ответ 1



Используйте HashSet. ArrayList: 14475 ms HashSet: 43 ms Sorted ArrayList: 540 ms Код: long time = 0; ArrayList strings = new ArrayList(); Random rand = new Random(); for (int i = 0; i < 1000; i++) { strings.add(String.valueOf(rand.nextInt())); } 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 hashSet = new HashSet(strings); time = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { hashSet.contains("test"); } endTime = System.currentTimeMillis(); System.out.println( "HashSet:" + (endTime - time) + " ms"); 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");

Комментариев нет:

Отправить комментарий