Diciamo che ho un enum con 100 valori. Per semplicità, prendere il seguente esempio:Conversione da stringa a enum Java con una grande quantità di valori
public enum code
{
CODE_1("string1"),
CODE_2("string2"),
CODE_3("string3"),
CODE_4("string4"),
...
}
Voglio creare un metodo pubblico per convertire stringhe con un formato noto (come "stringa1", "stringa2" ...) al appropriata CODE_1 valore enum, CODE_2 ... In genere ciò avviene ripetendo tutti i valori e, se viene trovata una corrispondenza, restituisce tale valore enum. (I dettagli possono essere trovati in this question.)
Tuttavia, sono interessato al ciclo regolare su tutti i valori. Questo potrebbe potenzialmente essere un enorme collo di bottiglia? E se invece di 100 elementi, ce ne fossero 1000?
Come esercizio per me stesso, ho cercato di ottimizzare questa ricerca con una mappa statica, che può assicurare O (1) tempo di ricerca dato qualsiasi stringa. Mi piace questo trucco extra, ma voglio solo includerlo nel mio codice se è effettivamente necessario. Quali sono i tuoi pensieri e le tue conclusioni sull'uso del metodo iterativo rispetto al metodo della mappa?
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);
}
}
vorrei andare con la Soluzione 'Map'. –
È bene usare la mappa invece di iterarla manualmente. –
Hai profilato e trovato l'ingenuo, iterativo modo era un collo di bottiglia? Se non lo hai fatto, non devi preoccuparti di questo: focalizza la tua attenzione sul codice che in realtà è un collo di bottiglia. – corsiKa