Puoi suggerire un tipo di mappa o una struttura di dati simile in cui possiamo ottenere sia il valore che la chiave l'uno dall'altro con uguale facilità. Vale a dire, ognuno può essere usato per trovare altro.Mappa bidirezionale
risposta
La soluzione più comune è l'utilizzo di due mappe. Puoi facilmente incapsularli in una classe con un'interfaccia amichevole estendendo AbstractMap
. (Aggiornamento: Questo è il modo di Guava HashBiMap
è implementato: due mappe)
Creazione di una nuova struttura di dati usando solo le matrici e le classi personalizzate presenta alcuni vantaggi. Le implementazioni della mappa sono involucri leggeri di una struttura dati che indicizza le chiavi. Dato che hai bisogno di due indici potresti anche usare due mappe complete.
Java non ha una mappa bidirezionale nella sua libreria standard.
Utilizzare ad esempio BiMap<K, V>
da Google Guava.
Google Guava contiene un BiMap
(mappa bidirezionale).
Dovresti aggiornare il link per puntare a Github che stavo per ma pensavo potesse essere banale dato che il collegamento attuale funziona per adesso. – Travis
A tempo debito. So che Google Code è in modalità di sola lettura. –
Prova anche il pacchetto Apache Commons Collections 4 BidiMap.
Se ritieni che sia doloroso importare alcune librerie di terze parti. Che ne dici di questa semplice lezione.
public class BiMap<K,V> {
HashMap<K,V> map = new HashMap<K, V>();
HashMap<V,K> inversedMap = new HashMap<V, K>();
void put(K k, V v) {
map.put(k, v);
inversedMap.put(v, k);
}
V get(K k) {
return map.get(k);
}
K getKey(V v) {
return inversedMap.get(v);
}
}
Assicurarsi che la classe K e V abbia un'implementazione hashCode corretta.
bene per il caso medio in cui è necessario un dizionario come quello, non vedo nulla di sbagliato con una soluzione KISS, basta mettere la chiave e il valore viceversa, salvando il sovraccarico di una seconda mappa o anche la libreria solo per quello scopo:
myMap.put("apple", "Apfel");
myMap.put("Apfel", "apple");
Si noti che questo funziona solo se la chiave e il valore sono dello stesso tipo e non si saprà più quale sia la chiave e quale è il valore. Che può andare bene in alcuni casi. – Literallie
- 1. Mappa bidirezionale in Java?
- 2. Mappa bidirezionale in .NET
- 3. Mappa bidirezionale in cacao
- 4. Mappa multivalore bidirezionale in Java
- 5. Una mappa bidirezionale in clojure?
- 6. dizionario bidirezionale?
- 7. Bind ToggleGroup bidirezionale in JavaFX
- 8. Boost :: Equivalente Bimap di multimap bidirezionale
- 9. Mappatura bidirezionale Python
- 10. RESTful: comunicazione bidirezionale
- 11. Associazione bidirezionale con $ routeParams?
- 12. Comunicazione bidirezionale utilizzando WCF
- 13. bidirezionale spanning tree
- 14. "Dijkstra bidirezionale" di NetworkX
- 15. DataGridCheckboxColumn binding bidirezionale
- 16. Spring Mongobre bidirezionale dbref
- 17. vista scorrimento bidirezionale
- 18. bidirezionale Android Beam
- 19. Hibernate - bidirezionale @OneToOne
- 20. Tabella hash bidirezionale in Erlang
- 21. Libreria di crittografia bidirezionale Java
- 22. Associazione dati bidirezionale con ngReact
- 23. bidirezionale associazione dati in ASP.NET
- 24. iteratore bidirezionale su file/ifstream
- 25. Plain Javascript bidirezionale Associazione dati
- 26. Associazione dati bidirezionale in backbone.js
- 27. C++ struttura dati efficiente per accesso casuale bidirezionale
- 28. Riferimento bidirezionale con classi di casi
- 29. hibernate @ManyToMany bidirezionale che richiama fetching
- 30. Una matrice "asimmetrica" a distanza bidirezionale
È possibile creare una classe contenente due hasmap, una per ciascuna direzione e gestirli in parallelo. L'ovvio lato negativo è il raddoppio dello spazio di archiviazione e il tempo di esecuzione. –
[java-hashmap-how-to-get-key-from-value] (http://stackoverflow.com/questions/1383797/java-hashmap-how-to-get-key-from-value) – jaco0646
Vedere questo risposta semplice http://stackoverflow.com/a/39329515/5466401 –