Sembra a me come il problema è che si sta utilizzando una stringa per rappresentare i dati che possono avere solo pochi, valori noti validi. Un Set può essere utile per convalidare se il valore stringa è valido, ma non impedisce che diventi non valido.
Il mio suggerimento è quello di definire un enum con i tipi di account validi e utilizzare quello sul posto di stringhe. Se si dispone di input provenienti dall'esterno che rappresenta un tipo di account, quindi inserire un metodo statico sull'enumerazione come "fromString" che restituisce un'istanza di enum appropriata, riducendo quindi la finestra in cui i dati non validi devono essere considerati.
è possibile creare un Set
di AccountType
Enumera istanze, a condizione di implementare le appropriate Comparator
, compareTo
, o hashCode
metodi (a seconda se si è utilizzato TreeSet
o HashSet
, etc.). Ciò potrebbe essere utile se si dispone di classificazioni dei tipi di account da controllare. Ad esempio, se ci sono "Local Admins", "Global Admins" e "Security Admins", è possibile definire un metodo isAdmin(AccountType t)
che ricerca un Set
di AccountTypes
. Per esempio:
private Set<AccountType> ADMIN_ACCOUNT_TYPES = new HashSet<AccountType>() {{
add(AccountType.LOCAL_ADMIN);
add(AccountType.GLOBAL_ADMIN);
add(AccountType.SECURITY_ADMIN);
}};
public boolean isAdmin(AccountType t) {
return ADMIN_ACCOUNT_TYPES.contains(t);
}
Ora, se si dispone di un caso in cui ci sono un sacco di diversi tipi di account, con molti gruppi, e le prestazioni di ricerche è un problema, questo è come si potrebbe risolverlo.
Anche se ad essere onesti, se hai solo pochi tipi di account e raramente cambia, questo può essere over-engineering un po '. Se ci sono solo 2 tipi di account, una semplice istruzione if con controllo di uguaglianza sarà più efficiente di una ricerca nella tabella hash.
Anche in questo caso, le prestazioni potrebbero non rappresentare un problema. Non ottimizzare eccessivamente o ottimizzare prima del tempo.
Come su [ 'EnumSet'] (http://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html)? –
Quanto è importante la velocità nella tua applicazione? A meno che tu non abbia effettivamente bisogno delle prestazioni dovresti risolvere il problema correttamente. E se hai bisogno di prestazioni, hai bisogno anche di parametri di riferimento. Se non ne hai, non devi iniziare la discussione sulle prestazioni. – mpkorstanje
È possibile combinare enumerazioni e altre strutture dati in Java: è possibile inserire un HashSet/mappa statico in un enum e aggiungere un metodo statico per accedervi. Riempilo in un blocco statico. In questo modo è possibile aggiungere all'enumerazione più metodi di ricerca come (getByName, getById) ecc. – Traubenfuchs