Desidero implementare una mappa hash senza distinzione tra maiuscole e minuscole. Questa domanda di per sé non è nuova, ma volevo aggiungere funzionalità extra e non so quale direzione generale prendere. Voglio che il cliente sia in grado di fare qualcosa del genere:Appoggio appropriato di una distinzione tra maiuscole e minuscole
boolean preserve_case = true;
Map<String, MyClass> maplet = new CaseInsensitiveHashMap<MyClass>(preserve_case); // If the client enters true at construction, then the put, get, and remove methods should still be case insensitive, but the entry and key sets should preserve the case that the client used when calling put.
maplet.put("FoO", my_class);
MyClass bar = maplet.get("foo"); // Should return a reference to my_class
Set<Entry<String, MyClass>> case_sensitive_set = maplet.entrySet(); // Since the client input true to preserve order, this entry set should be ["FoO"=my_class.toString()]
posso gestire la maggior parte di questo abbastanza bene; Mi limito a tenere un HashMap
sul backend. Quando un cliente inserisce qualcosa, prima di aggiungerlo alla mappa, inserisco la chiave in maiuscolo.
Sto solo facendo fatica a scrivere i metodi keySet()
e entrySet()
. Voglio che il set di voci restituite e il set di chiavi siano supportati dalla mappa, come lo standard con le mappe Java.
Tuttavia, l'unico modo che posso pensare di gestire è quello di creare una seconda struttura di dati di supporto, come un qualcosa preserved_case_map
, che contiene il input.toUpperCase()
=> ingresso come coppie di valori chiave. Quando il client chiama lo entrySet()
(o keySet()
), è possibile creare il set di voci restituite eseguendo il ciclo attraverso lo preserved_case_map
. Il problema qui è che il set di voci restituite non verrà modificato se apporto modifiche allo HashMap
, a meno che non fraintenda qualcosa ...
Fammi sapere se questo ha un senso, o se sto contorcendo un semplice situazione.
La sua non è chiaro se si desidera keySet() per restituire tutte le chiavi che sono state inserite (foo, foo, foo) o solo l'ultima che rimane nella mappa. – Andrejs
Il mio errore. Voglio che keySet() restituisca [FoO], poiché il client è entrato true nel costruttore e ha inserito la coppia di valori chiave come "FoO", my_class. – Sal
Usa un'opzione TreeMap? – Andrejs