2016-03-26 14 views
2

Ich muss Paare wie <jSessioId, userId> speichern. jSessionId ist einzigartig, aber userId nicht eindeutig (Mehrfachanmeldung).Beste Datenstruktur zum Speichern von jSessionId und userId

Ich brauche folgende Vorgänge auszuführen:

void add(jSessioId, userId) 
userId getUserId(jSessionId) 
void removeByJSessionId (jSessionId) 
Set<userId> getAllUserId() 

ich versuche HashMap<jSessioId, userId> zu verwenden, aber in diesem Fall getAllUserId() erfordern Werte konvertieren jedes Mal, wenn ich diese Daten anfordern zu setzen. Ich habe versucht, einen zusätzlichen Satz zu verwenden, um userId zu speichern, aber das sieht für mich auch nicht gut aus wegen viel zusätzlichen Codes.

Ich frage mich, was ist die beste Lösung, um solche Art von Daten zu speichern.

** UPDATE Use Cases für Methoden:

  • add - Login Operationen
  • getUserId - jede Anfrage Betrieb
  • removeBySessionId - logout/session Zuhörer
  • getAll - früher viel in verschiedenen Stelle des Codes

In der aktuellen Lösung führe ich add Operationen sowohl auf hashmap und eingestellt. Ich suche nach einer besseren Lösung.

+0

Können Sie uns einige Kontext geben, wo und wann Sie diese Operationen durchführen wird? –

+0

void add (jSessioId, userId) - Benutzer-Login userId getUserId (JSESSIONID) - jede Anfrage Leere removeByJSessionId (JSESSIONID) - Sitzung Hörer auf zerstören/Logout Set getAllUserId() - sehr oft in anderen Ort der Code –

+0

Hängt davon ab wie oft getAllUserId aufgerufen wird, ob eine sortierte 'map.values ​​()' ausreicht ('O (N log N)'). (Man kann annehmen, dass Mehrfachanmeldungen selten sind, wenn das Sitzungszeitlimit klein genug ist und die Anwendung die Sitzung nicht dauerhaft verliert.) –

Antwort

0

Können Sie vielleicht 2 Datenstrukturen verwalten?

void add (jsessionId, userId) würde diese beiden Parameter zu einer HashMap hinzufügen, wie Sie es jetzt tun, und auch die userId zu einem Set hinzufügen?

+0

Danke für Ihre Antwort, dies ist meine aktuelle Lösung, aber ich dachte, dass es vielleicht eine bessere Lösung gibt. –

1

können Sie verwenden Set userIds = new HashSet(Map.values());

+0

Unterstützt 'BiMap' keine eindeutigen Werte? –

+0

Sie haben Recht. BiMap benötigt eindeutige Werte. – Sanj

Verwandte Themen