Le enumerazioni possono farlo bene, così come una mappa hash. Dipende quando si desidera creare la relazione. Scegli enumi per la progettazione. Hash per tempo di esecuzione.
Sì, l'implementazione di una tabella hash è possibile in Java. Puoi anche utilizzare quello già implementato in java.util
chiamato HashTable
. Ma a meno che tu non stia facendo cose funky multi-thread ti consiglio HashMap
, dallo stesso pacchetto, che è lo stesso tranne che non sincronizzato e quindi è un po 'più veloce.
Ricorda che i programmatori non sono un servizio di scrittura del codice, ma ero annoiato, quindi ho intenzione di portare a casa il mio punto con 60 linee che usano entrambe le idee in un glorioso adattamento dell'ingegneria.
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StringsToNumbers {
public static void main(String args[]) {
List<Converter> converters = Arrays.asList(new MapConverter(),new EnumConverter());
List<String> numerals = Arrays.asList("One", "Two", "Three");
for (Converter con : converters) {
for (String num : numerals) {
System.out.print(con.convert(num));
}
System.out.println();
}
}
}
interface Converter {
int convert(String str);
}
// Assigned at run time
class MapConverter implements Converter {
public int convert(String str){
Map<String, Integer> s2i = new HashMap<>();
s2i.put("One",1);
s2i.put("Two",2);
s2i.put("Three",3);
return s2i.get(str);
}
}
// Assigned at design time
enum StrToNum {
One(1), Two(2), Three(3);
int value;
StrToNum(int v) {
value = v;
}
int getValue() {
return value;
}
}
class EnumConverter implements Converter {
public int convert(String str) {
return StrToNum.valueOf(str).getValue();
}
}
Visualizza
123
123
Nota come MapConverter.convert()
ricostruisce completamente inefficientemente il HashMap
ogni volta che viene chiamato. Questo è solo per mostrare che diversamente da Enum la mappa può essere cambiata in fase di esecuzione. Una HashMap potrebbe essere utilizzata anche in caso di design time se la abbiamo costruita in fase di costruzione.