2015-06-15 4 views
-4

Предположим, я добавить элемент к определенному TreeMap как:Поиск в TreeMap с каскадными значениями

directory.put(personsLastName + personsFirstName, " Email - " + personsEmail 
         + ", Class Status - " + studentStatus); 

если я пытаюсь сделать что-то вроде:

boolean blnStudentExists = directory.containsValue("freshman"); 

он всегда будет ложным. Мне интересно, связано ли это с тем, как я заполняю карту? Если да, то как я могу найти все значения на карте, которые являются учениками? Моя цель - печатать только студентов. Благодарю.

+2

Как может «первокурсник» быть равен «Email» - , Статус класса - '? –

+0

переменная studentStatus устанавливается либо новичком, второкурсником, младшим или старшим. – kl654

+0

Что вы вкладываете в карту? Каковы значения аргумента (сначала это ключ, а второй - значение) для 'put'? –

ответ

1

Пожалуйста, перечитайте TreeMap Javadocs - или общий интерфейс Map, если на то пошло - и хорошо ознакомьтесь с ними за то, что вы пытаетесь сделать здесь.

.containsValue() будет искать конкретные, точные совпадения в области значений, которые вы вставили на свою карту - ничего больше, не меньше. Вы не можете использовать это для поиска частичных строк. Поэтому, если вы вставили значение [email protected], Class Status - Freshman, .containsValue вернется только true для [email protected], Class Status - Freshman - не только для Freshman.

Где это вам?

  1. Вы можете написать собственную процедуру поиска, которая выполняет итерацию по каждому значению на карте и выполняет подстроку, соответствующую тому, что вы ищете. Неэффективен для большого количества значений. Вам также нужно будет беспокоиться о возможности путать разделители между полями, если/когда вы добавите больше.
  2. Вы можете создавать и использовать несколько параллельных карт, которые сопоставляются с статусами классов, другие - с электронными сообщениями и т. Д.
  3. Вы можете использовать базу данных (или встроенную базу данных - выберите свой вкус) - это похоже на то, что вы «Во всяком случае, пытаюсь создать здесь. Вам действительно нужно заново создать колесо?

Для этого - вы не хотите, чтобы ваши ценности по-прежнему искали. Это противоречит точному назначению Карты - Хеш, Дерево или иначе. Поиски ваших ключей - это то, где любая эффективность будет лежать. В большинстве реализаций (включая готовые TreeMap и HashMap), поиск по значениям будет в любом случае проверять всю структуру карты (или, по крайней мере, до тех пор, пока он не сможет спастись после поиска первого совпадения).

+0

Я подозревал, что это связано с тем, как я объединяю меньшие значения, чтобы сделать одно значение. Ваше объяснение было полезным. Спасибо. – kl654

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