2010-03-11 12 views

risposta

33

Come indicato nella domanda collegata, si suppone di utilizzare i metodi di fabbrica create().

Nel suo caso, questo significa cambiare

this.wordToWordID = new BiMap<String. Integer>(); 

a

this.wordToWordID = HashBiMap.create(); 
+0

Hmm. La tua risposta solleva una nuova domanda. ** Perché EnumBimap non ha il metodo 'create' senza parametri, come HashBiMap? ** –

+0

@Masi: Questa è una buona domanda. Credo che la ragione sia perché EnumBimap ha bisogno di sapere quali sono i suoi parametri e, a causa della cancellazione dei tipi, non può sapere a meno che non si passino gli oggetti 'Class' ad esso ad un certo punto. Lo stesso vale per 'EnumMap' e' EnumSet' nella libreria standard. –

+0

Quindi non è sufficiente che 'EnumMap' conosca solo i tipi. Apparentemente fa un po 'di elaborazione in base al contenuto dei dati di input. –

6

Un altro ottimo modo per creare un BiMap, ma in questo caso un BiMap immutabile, sta utilizzando ImmutableBiMap.Builder.

static final ImmutableBiMap<String, Integer> WORD_TO_INT = 
    new ImmutableBiMap.Builder<String, Integer>() 
     .put("one", 1) 
     .put("two", 2) 
     .put("three", 3) 
     .build(); 

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html

+0

Penso che questo sia addirittura migliore della risposta di Michael in alcuni casi. Immutabile per efficienza, non avendo valori nulli. Cosa ne pensi? Penso che questa funzione sia apparsa dopo che ho fatto la domanda. Manuale su http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html –

+0

Puntelli per javadocs @Masi, non mi è venuto in mente di mettere anche loro qui. Immagino che Immutability vs. Mutability sia una discussione diversa, ma poiché uso sempre oggetti immutabili ho pensato che almeno in questo modo valesse la pena menzionarlo. –

Problemi correlati