Замена переключателя в дополнительной структуре данных / данных (Java) - PullRequest
0 голосов
/ 01 июня 2010

это может быть нубийским вопросом, но он мне раньше никогда не был нужен:

У меня есть несколько строк, и я хочу сравнить их с заданными ...

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

Есть ли более элегантный способ поменять эти строки как данные ключ / значение?

приветствует, poeschlorn

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Да, используйте строки в качестве ключей в HashMap , и соответствующие значения должны быть объектами, определяющими действие, которое должно выполняться в случае совпадения ключа, если только у вас не одно поведение, в этом случае можно просто использовать HashSet , проверить, находится ли строка в наборе, а затем принять соответствующие меры.

1 голос
/ 01 июня 2010

Обновление: Мой плохой. Я неверно истолковал это как поиск без учета регистра.

Чувствительно к регистру легко. Java пока не поддерживает String s в switch операторах. Самое простое решение:

if (string1.equals(string2)) {
  ...
} else if (string1.equals(string3)) {
  ...
}

Или как цикл:

String[] matches = new String[] {
  "abcd",
  "efgh",
  "ijkl"
};

for (String match : matches) {
  if (matches.equals(string)) {
    ...
  }
}

Конечно, это линейно (O (n)) и не масштабируется, но просто и достаточно для простейших случаев. Лучшее решение - использовать поиск на основе хеша:

Set<String> matches = new HashSet<String>();
matches.add("abcd");
matches.add("efgh");
matches.add("ijkl");

if (matches.contains(string1)) {
  ...
}

Это почти линейный (O (1)) поиск, который будет масштабироваться намного лучше при большом количестве String с.

...