У меня есть приложение, в котором у меня есть правило объект, который имеет список предикатов фильтра . Я буду сравнивать много событий с предикатами и хочу знать, совпадают ли они все . Большинство событий не совпадают с правилом, поэтому я хочу потерпеть неудачу как можно быстрее. Каждый фильтр будет выполнять задачу, примерно эквивалентное сравнительному сравнению с случаями, поэтому я думаю, что переупорядочение списка будет более эффективным, чем ненужный тест. 5-50 элементов длиной, у меня возникает подозрение, что хранение фильтров в массивном списке будет наиболее эффективным, так как это заставляет этот список храниться в одном блоке физической памяти, а не распространяется по этой куче.public class Rule {
private List filters;
public boolean doesEventMatch(final Event event) {
for (int i = 0; i < filters.size(); i++) {
if (!filter.test(event)) {
// remove the active filter and insert it at the front of the list
if (i != 0) {
final Predicate activeFilter = filters.remove(i);
filters.add(0, activeFilter);
}
return false;
}
}
return true;
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... short-list