#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; ArrayListstrings = 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");
Комментариев нет:
Отправить комментарий