Конвертировать из String в перечисление Java с большим количеством значений [duplicate]

На этот вопрос уже есть ответ здесь:

Как получить значение перечисления из строкового значения в Java? 24 ответа

Допустим, у меня есть перечисление со 100 значениями. Для простоты возьмем следующий пример:

public enum code
{
    CODE_1("string1"),
    CODE_2("string2"),
    CODE_3("string3"),
    CODE_4("string4"),
    ...
}

Я хочу создать открытый метод для преобразования строк с известным форматом (например, «string1», «string2» ...) в соответствующее значение перечисления CODE_1, CODE_2 ... Обычно это делается путем перебора всех значений, и если совпадение найдено, вернуть это значение перечисления. (Подробности можно найтив этом вопросе.)

Тем не менее, я обеспокоен тем, как регулярно перебирать все значения. Может ли это быть огромным узким местом? Что, если вместо 100 элементов было 1000?

В качестве упражнения для себя я попытался оптимизировать этот поиск с помощью статической карты, которая может обеспечить O (1) время поиска для любой строки. Мне нравится этот дополнительный трюк, но я хочу включить его в свой код, только если это действительно необходимо. Что вы думаете об использовании метода итерации и метода карты?

public enum Code
{
    ...
    //enum values
    ...


    //The string-to-Code map
    private static final Map<String,Code> CODE_MAP = populateMap();

    private static Map<String,Code> populateMap()
    {
        Map<String,Code> map = new HashMap<String,Code>();

        for(Code c : Code.values())
        {
            map.put(c.getCode(), c);
        }

        return map;
    }


    private String code;

    private Code(String code)
    {
        this.code = code;
    }

    public String getCode()
    {
        return this.code;
    }

    public Code convertFromString(String code)
    {
        //assume that the given string is actually a key value in the map

        return (Code) CODE_MAP.get(code);
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос