Umwandeln von String in eine Java-Aufzählung mit einer großen Anzahl von Werten [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Wie erhalte ich einen Enum-Wert aus einem String-Wert in Java? 24 Antworten

Angenommen, ich habe eine Aufzählung mit 100 Werten. Nehmen Sie der Einfachheit halber das folgende Beispiel:

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

Ich möchte eine öffentliche Methode zum Konvertieren von Zeichenfolgen mit einem bekannten Format (z. B. "Zeichenfolge1", "Zeichenfolge2" ...) in den entsprechenden Aufzählungswert CODE_1, CODE_2 ... erstellen. Dies erfolgt in der Regel durch Iteration über alle Werte und Wenn eine Übereinstimmung gefunden wird, geben Sie diesen Enum-Wert zurück. (Details finden Sie untin dieser Frage.)

Ich befasse mich jedoch regelmäßig mit dem Durchschleifen aller Werte. Könnte dies möglicherweise ein enormer Engpass sein? Was wäre, wenn anstelle von 100 Elementen 1000 vorhanden wären?

Als Übung für mich habe ich versucht, diese Suche mit einer statischen Karte zu optimieren, die bei jeder Zeichenfolge die O (1) -Suchzeit sicherstellt. Ich mag dieses zusätzliche Gimmick, möchte es aber nur dann in meinen Code aufnehmen, wenn es tatsächlich notwendig ist. Was sind Ihre Gedanken und Erkenntnisse zur Verwendung der Iterationsmethode im Vergleich zur Kartenmethode?

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);
    }
}