Я хочу искать в Наборе, не выполняя итерации вручную по elments, но, кажется, нет метода, чтобы сделать Collections.search (myset, цель, новый ComparatorThing ()). Разве я не вижу что-то?
Спасибо.
Править:
public static T search(final Set set, final T searchEntry, final Comparator comparator) {
for (final T entry : set) {
if (comparator.compare(entry, searchEntry) == 0) {
return entry;
}
}
return null;
}
Взгляните на http://commons.apache.org/collections/ , который предоставляет, например: общедоступный статический java.util.Set SetUtils.predicatedSet (set, predicate)
Здесь нужно немного больше деталей - вы пытаетесь искать по отдельному полю в объекте, содержащемся в Set
? Или просто найти определенный элемент в Set
?
Сама идея Set
, как голый интерфейс, не имеет представления об упорядочивании - вам придется перебирать каждый элемент.
Однако если вы ограничитесь SortedSet
, в котором уже есть упорядочение, вы, возможно, сможете воспользоваться преимуществами упорядочения, но поскольку Set
не допускают случайного доступа, вам все равно придется либо итерировать каждый элемент, либо знать больше информации о коллекции помимо того, что это Set
.
Не могли бы вы подробнее описать ваш алгоритм и то, чего вы пытаетесь достичь?
Вероятно, Set
не является идеальным способом представления данных, которые вы хотите "искать".
Попытка содержит (Объект o)
из интерфейса Коллекция
. Интерфейс Set расширяет Collection, поэтому все наборы необходимы для реализации методов Collection.
Имейте в виду, что если все, что вы знаете о своем объекте для поиска, это то, что он гарантированно является набором, у вас нет гарантии, что ЕСТЬ какой-либо способ поиска без итерации по каждому элементу, так как этот содержит ()
метод может работать, а может и не работать, в зависимости от того, какой тип реализации набора вы на самом деле используете.
Ссылки
TreeSet имеет некоторые методы, которые могут быть полезны, например ceiling
для поиска следующего элемента, большего или равного ключу поиска, floor
для получения следующего меньшего элемента. Также headSet, tailSet и subSet для поиска частей множества меньше, больше или между заданными пределами.