Помогите проверка аргумента команды на равенство с элементами массива

Статус
Закрыто для дальнейших ответов.

Zemf4you

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
zemf4you
Нужно сделать проверку эквивалентности args[1] на элементы массива rules. Оно, по сути, работает, но если они не равны, то вылетает ошибка null. Проверка на длину rules почему-то не помогает
Код:
String rules[] = {"1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7"};
   
           for (int i = 0; !args[1].startsWith(rules[i]) && rules.length != i; i++) {
               sender.sendMessage("args[1] не совпадает c rules[" + i + "]");
           }
 
Итерация массива в любом случае быстрее. ТС задал список правил через массив, поэтому я и написал через массив. Если получать с конфига например, то естественно удобнее использовать лист.
Я только что замерил (Array of Strings и List of Strings) и разницы нет практически, и работает это через раз. Раз выигрывает List, раз выигрывает Array. Обработка в циклах одинаковая для каждого из участников "забега", внесены те же строки.

Так что успокойтесь, ребят. List действительно лучше, так как удобней (это не значит, что использовать Array не надо. Все по ситуации и по нужде, конечно).
 
Я только что замерил (Array of Strings и List of Strings) и разницы нет практически, и работает это через раз. Раз выигрывает List, раз выигрывает Array. Обработка в циклах одинаковая для каждого из участников "забега", внесены те же строки.

Так что успокойтесь, ребят. List действительно лучше, так как удобней (это не значит, что использовать Array не надо. Все по ситуации и по нужде, конечно).

А размер списков/массивов у тебя какой?
 
Неа, итерация LinkedList будет все-таки быстрее. Да и волшебного супер-пупер прироста скорости на 7 элементах не будет

Короче, с любого профиля использование List'а лучше и универсальнее
С чего бы итерация по связанному списку будет быстрее?
 
С чего бы итерация по связанному списку будет быстрее?

Так и знал что возникнешь и начнешь докапываться.
Ну, последовательный перебор должен быть быстрее если не массива, то ArrayList'а точно
 
Чет уже хрень обсуждаем, это простая задача и имеет десятки реализации и каждый не хуже другого. Пора заканчивать.
 
Если я скажу, что всегда использую List, то меня назовут говнокодером, верно?
 
Напоследок несколько тестов:
Код:
Тест №1
Время итерации String[] = 78
Время итерации List<String> = 67
Тест №2
Время итерации String[] = 94
Время итерации List<String> = 62
Тест №3
Время итерации String[] = 63
Время итерации List<String> = 62
Тест №4
Время итерации String[] = 78
Время итерации List<String> = 47
Тест №5
Время итерации String[] = 78
Время итерации List<String> = 63
Тест №6
Время итерации String[] = 62
Время итерации List<String> = 73
Тест №7
Время итерации String[] = 63
Время итерации List<String> = 62
Тест №8
Время итерации String[] = 79
Время итерации List<String> = 62
Тест №9
Время итерации String[] = 63
Время итерации List<String> = 63
Тест №10
Время итерации String[] = 78
Время итерации List<String> = 63

Код:
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        int n = 10_000_000;
        String[] array = new String[n];
        Random r = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = String.valueOf(r.nextInt(10));
        }
        for (int i = 1; i <= 10; i++) {
            System.out.println("Тест №"+i);
            List<String> list = Arrays.asList(array);
            int count = 0;
            long startTime = System.currentTimeMillis();
            for (String s : array) {
                if (s.equals("9")) {
                    count++;
                }
            }
            System.out.println("Время итерации String[] = " + (System.currentTimeMillis() - startTime));
            count = 0;
            startTime = System.currentTimeMillis();
            for (String s : list) {
                if (s.equals("9")) {
                    count++;
                }
            }
            System.out.println("Время итерации List<String> = " + (System.currentTimeMillis() - startTime));
        }
    }
}
 
Если я скажу, что всегда использую List, то меня назовут говнокодером, верно?
Называть говнокодером человека до просмотра кода и где ты используешь лист - глупо. Ведь никто не знает, где и в каких обстоятельствах ты его используешь. Может ты еще не имел задач, где массив лучше.
 
Называть говнокодером человека до просмотра кода и где ты используешь лист - глупо. Ведь никто не знает, где и в каких обстоятельствах ты его используешь. Может ты еще не имел задач, где массив лучше.
В точку
 
Так и знал что возникнешь и начнешь докапываться.
Ну, последовательный перебор должен быть быстрее если не массива, то ArrayList'а точно
Массив занимает непрерывную область памяти, перебор массива будет быстрее чем связанного списка.
Если я скажу, что всегда использую List, то меня назовут говнокодером, верно?
Та он как раз таки и предопчтительнее почти во всех случаях, кроме тех когда тебе нужен голый набор нескольких данных неизвестного кол-ва. Да и юзать яву и и беспокоиться о том, что голый массив быстрее на 1мс, как-то уж совсем тупо.
 
Итерировать LinkedList может быть медленнее из-за кеш-промахов. Нужно ходить не только по ссылкам в хип, но туда же по ссылкам за нодами самого списка. В любом случае проверка наличия элемента в массиве/любом списке будет ~ O(N), а в HashSet<String> ~ O(1).
Но на таких размерах, как у ТС, да ваще насрать, что использовать. Не нужно заниматься преждевременной оптимизацией.
 
Итерировать LinkedList может быть медленнее из-за кеш-промахов. Нужно ходить не только по ссылкам в хип, но туда же по ссылкам за нодами самого списка. В любом случае проверка наличия элемента в массиве/любом списке будет ~ O(N), а в HashSet<String> ~ O(1).
Но на таких размерах, как у ТС, да ваще насрать, что использовать. Не нужно заниматься преждевременной оптимизацией.
Ну у хеш сета если оч круто все то O(1) а так O(log(n))
 
Мхе-хе, ну и нафлудили.
Тему закрою, но последний вопрос: Как перенести строку в чате?
 
не уж то каждый раз писать Bukkit.getServer().broadcastMessage()?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх