3 Stimmen

In Java existiert ein Datentyp wie dieser?

Ich habe das in Redis gefunden und versucht zu sehen, ob es etwas Ähnliches in Java gibt. Sagen wir, ich habe die folgenden Daten:

3:1
3:2
3:3
4:1

Wie Sie sehen können, sind keine der einzelnen Datenpunkte einzigartig, aber die Kombination ist einzigartig. Es gibt einen Befehl in Redis:

sadd 3 1 2
sadd 3 3
sadd 4 1

Das würde mir etwas wie das folgende geben:

3 -> 1, 2, 3
4 -> 1

Indem Sie etwas wie smembers 3 machen (dies würde alles für 3 zurückgeben) oder smembers 3 2(dies würde zurückgeben, ob der Unterwert existiert).

Ich frage mich, wie nahe ich an diese Funktionalität in Java kommen kann?

7voto

Timothy Jones Punkte 20677

Die Guava MultiMap Schnittstelle tut genau das. Beachten Sie, dass es von der jeweiligen Implementierung abhängt, ob sie doppelte Paare zulässt. Es scheint, als ob Sie nach einer Lösung suchen, bei der die K,V Paare immer eindeutig sind. In diesem Fall sollten Sie sich die HashMultimap Klasse ansehen.


Wenn Sie jedoch Ihre eigene Lösung implementieren möchten, suchen Sie wahrscheinlich nach einer Kombination aus Map und Set: Map>

Wenn Sie (Schlüssel, Wert) Elemente zur Map hinzufügen:

  1. Überprüfen Sie zuerst, ob der Schlüssel vorhanden ist. Wenn nicht, müssen Sie ein leeres Set hinzufügen.
  2. Dann machen Sie map.get(key).put(value);

Wenn Sie alle Elemente mit einem spezifischen Schlüssel abrufen möchten:

  1. do map.get(key) und iterieren Sie über das Ergebnis

Wenn Sie überprüfen möchten, ob ein bestimmtes Schlüssel/Wert Paar vorhanden ist:

  1. Führen Sie if(map.containsKey(key) && map.get(key).contains(value)) aus

Zur Belohnung könnten Sie all dies in einem Wrapper implementieren. Die ForwardingMap von Guava könnte ein guter Ausgangspunkt sein.

2voto

Sie können Ihre eigene Klasse MultivalueMap wie folgt erstellen:

import java.util.Set;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

public class MultiValueMap {

    public Map> map = null;

    public MultiValueMap(){
        this.map = new HashMap();
    }

    public void putList(T1 key, List list){

        map.put(key, list);
    }

    public void put(T1 key, T2 value){
        List list = null;
        if(map.get(key) == null){
            list = new ArrayList();
            map.put(key, list);
        }
        else {
            list = map.get(key);
        }
        list.add(value);
    }

    public List get(T1 key){
        return map.get(key);
    }

    public Set keySet(){

        return map.keySet();
    }

    public Map getMap(){

        return this.map;
    }

    public boolean contains(T1 key, T2 listValue){

        List list = map.get(key);

        return list.contains(listValue);
    }
}

1voto

Ted Hopp Punkte 227177

Es ist nichts direkt in Java eingebaut. Sie könnten etwas wie eine

Map>

verwenden, um die Beziehungen zu speichern. Diese Art von Konstrukt wird im Java-Tutorial zum Map-Interface diskutiert. Sie könnten auch etwas wie Guavas MultiMap verwenden.

1voto

Dhruv Gairola Punkte 8982

Von Wikipedia:

In seiner äußeren Schicht ist das Redis-Datenmodell ein Wörterbuch, in dem Schlüssel auf Werte abgebildet sind.

Anders ausgedrückt, verwenden Sie einfach eine Map, um Schlüssel-Wert-Paare zu speichern. Beachten Sie, dass die Map nur eine Schnittstelle ist. Sie müssen ein Map-Objekt mit Unterklassen erstellen, die die Map-Schnittstelle implementieren, z. B. HashMap, TreeMap, usw. Ich denke, Sie sind verwirrt zwischen der Datenstruktur selbst und der Implementierung ihrer Methoden. Diese Funktionen, die Sie erwähnt haben, können leicht in Java implementiert werden.

1voto

Balaswamy Vaddeman Punkte 7970

Sie können dies erreichen, indem Sie das Collections Framework in Java verwenden.

da Sie nach Schlüssel-Wert-Paaren suchen, die gespeichert werden sollen.

Sie können Map und Set in Java verwenden.

Map>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X