Сравнение Normal ArrayList с Object ArrayList, без использования циклов

У меня была та же проблема, это моя небольшая программа для тестирования решения. Это выглядит довольно просто, поэтому я решил поделиться им с будущими посетителями.

#include <stdio.h>

int add(int a, int b) {
    return a+b;
}

int minus(int a, int b) {
    return a-b;
}

int multiply(int a, int b) {
    return a*b;
}

typedef int (*f)(int, int);                 //declare typdef

f func[3] = {&add, &minus, &multiply};      //make array func of type f,
                                            //the pointer to a function
int main() {
    int i;
    for (i = 0; i < 3; ++i) printf("%d\n", func[i](5, 4));
    return 0;
}
-2
задан Khemraj 13 July 2018 в 05:31
поделиться

1 ответ

Если вы выполняете короткий код без цикла и если ваш уровень API достаточно высок:

    ArrayList<ArrayListModel> filteredList = new ArrayList<>(modelList);
    filteredList.removeIf(m -> ! aList.contains(m.getId()));

Сначала он копирует исходный список, а затем удаляет из копии элементы, чей идентификатор не в aList. Не ошибайтесь, конечно, в реализации removeIf есть цикл (по-настоящему три цикла).

Если вы опасаетесь, что может потребоваться слишком много времени для выполнения с большим количеством данных : Подождите. Не оптимизируйте, прежде чем вы убедитесь, что это необходимо. Если вы беспокоитесь, проводите тесты на реальных объемах данных на компьютере, родственном вашему компьютеру с нагрузкой, аналогичной ожидаемой.

Если вы либо видели на производстве, либо в своих тестах, что выше занимает слишком много времени, первый прием заключается в том, чтобы поместить идентификаторы либо в HashSet, либо в BitSet, чтобы ускорить поиск. Например:

    Set<Integer> ids = new HashSet<>(aList);
    ArrayList<ArrayListModel> filteredList = new ArrayList<>(modelList);
    filteredList.removeIf(m -> ! ids.contains(m.getId()));

Если вам нужно дополнительное ускорение, сортируйте оба списка по ID и используйте алгоритм слияния. Посмотрите, что это такое.

На настольном компьютере вы также можете получить ускорение от потока API и параллельных потоков. Является ли это также на устройстве Android, которое я не знаю.

0
ответ дан Ole V.V. 17 August 2018 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: