2016-12-17 3 views
1

У меня есть TreeSet, где элементами являются объекты с двумя атрибутами (имя и возраст). Каждый раз, когда я хочу искать объект с определенным именем, мне приходится прибегать к расширенному циклу или итератору.Невозможно использовать метод contains() метода TreeSet

Невозможно использовать метод для поиска объекта с определенным именем, так как имя «инкапсулировано» внутри этого объекта.

Есть ли способ преодолеть эту проблему? То есть, способ воспользоваться временной сложностью ?

Поскольку все элементы в TreeSet сортируются по имени, должен быть способ, который я думаю.

Пример того, что я хочу добиться:

public Element search(String name) { 
    // if some TreeSet element's name.equals(name), return the Element 
} 

пример того, что я не хотите использовать:

public Element search(String name) { 
    for (Element entry : tree) { 
     if (entry.getName().equals(name)) { 
      return entry; 
     } 
    } 

    return null; 
} 
+0

Почему это набор вместо карты от имен до whatevers? – user2357112

+0

@ user2357112: Потому что это назначение, и мне не разрешено изменять коллекцию. –

+0

Тогда задание, вероятно, либо ожидает, что вы будете использовать поиск O (n), либо ожидаете, что вам не удастся выполнить эти операции поиска. Также существует вероятность того, что вы должны создавать и поддерживать вспомогательную карту, или что назначение несовместимо, или что вы что-то неправильно поняли. – user2357112

ответ

0

В общем, наши существующие TreeSet<Person> не могут быть использованы для поиска по имени. Дерево будет организовано на основе того, что вы заказали для набора.

В общем, вам нужен отдельный Map<String, Person>, который содержит сопоставления для всех объектов Person в исходном комплекте. Это влечет за собой сохранение набора и карты в шаге.

Однако, если упорядочение вашего набора дерева представляет собой сочетание имени и возраст, с именем, обеспечивающего главной упорядоченности, то вы могли использовать TreeSet.tailSet, чтобы получить «хвост» из набора, начиная с собственное имя. Затем перетащите хвост до тех пор, пока имя не изменится.

0

TreeSet упорядочивает товары по их Comparator.

Вы можете реализовать операцию сравнения, которая сначала будет сортироваться по имени.

Смежные вопросы