Просто, чтобы очистить код для начала. У нас (исправлено):
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
Это изменчивая статика, которую FindBugs скажет вам очень капризная. Это должно быть личное:
private static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
(Обратите внимание, вы можете сбросить бит new String[];
.)
Итак, ссылочные массивы плохие, и, в частности, здесь мы хотим установить:
private static final Set<String> VALUES = new HashSet<String>(Arrays.asList(
new String[] {"AB","BC","CD","AE"}
));
(Параноидальные люди, такие как я, могут чувствовать себя более непринужденно, если бы это было заключено в Collections.unmodifiableSet
- это могло бы даже быть обнародовано.)
«Учитывая строки s, есть ли хороший способ проверить, содержит ли VALUES s?»
VALUES.contains(s)
O (1).
Обновление: Начиная с Java SE 9 у нас есть Set.of
.
private static final Set<String> VALUES = Set.of(
"AB","BC","CD","AE"
);
Правильный тип , неизменный , O (1) и краткий . Красивая.
(Чтобы немного больше узнать о бренде, API коллекций, как и следовало ожидать, до сих пор не содержит неизменяемые типы коллекций, а синтаксис все еще слишком многословен, на мой вкус).