Sie können einen Schlüssel/Wert-Speicher zum Modellieren der meisten Datenstrukturen verwenden, wenn Sie Nebenläufigkeitsprobleme ignorieren. Ihre Anforderungen sind nicht ganz klar, daher werde ich einige Annahmen zu Ihrem Anwendungsfall treffen. Hoffentlich, wenn sie falsch sind, können Sie den Ansatz verallgemeinern.
Sie können eine verknüpfte Liste trivialerweise im Speicher erstellen, indem Sie einen bekannten Knoten root (node_root) verwenden, der auf ein Werttupel von {data, prev_key, next_key} zeigt. Die Elemente prev_key und next_key sind Schlüsselnamen, die der Konvention 'node_foo' folgen sollten, wobei foo eine UUID ist (im Idealfall können Sie diese sequenziell generieren, wenn Sie nicht einen anderen Typ von UUID verwenden können). Dies bietet einen geordneten Zugriff auf Ihre Daten.
Jetzt, wenn Sie O (1) Entfernen eines Schlüssels benötigen, können Sie einen zweiten Index für die Struktur mit dem Schlüssel 'data' und dem Wert 'node_foo' für den rechten foo hinzufügen. Dann können Sie die Entfernung genau wie eine verknüpfte Liste im Speicher durchführen. Entfernen Sie den Indexknoten, wenn Sie fertig sind.
Denken Sie daran, dass die gleichzeitige Änderung dieser Liste genauso schlimm ist wie die gleichzeitige Änderung einer gemeinsam genutzten Datenstruktur. Wenn Sie etwas wie BDBs verwenden, können Sie ihre (ausgezeichnete) Transaktionsunterstützung verwenden, um dies zu vermeiden. Für etwas ohne Transaktionen oder Nebenläufigkeitssteuerung möchten Sie externe Sperren oder serialisierte Zugriffe auf einen einzelnen Thread bereitstellen.
Können Sie weitere Einzelheiten zu Ihrem Problem angeben? Vielleicht gibt es noch eine andere Antwort. – ShabbyDoo