Effiziente Weise zu löschen, Werte aus hashmap-Objekt
Ich habe HashMap-Objekt enthält einen Schlüssel x-y-z
mit entsprechenden Wert test-test1-test2
.
Map<String,String> map = new HashMap<String,String>();
map.put("x-y-z","test-test1-test2");
map.put("x1-y1-z1","test-test2-test3");
Nun habe ich einen input-string-array, enthält ein Stück von der Schlüssel:
String[] rem={"x","x1"}
Basierend auf dieser string-array I entfernen möchten HashMap Werte.
Kann jemand geben ein effizienter Ansatz, um diese operation?
Ich habe Mühe zu verstehen, was genau Sie tun und was Sie gefragt haben. Vielleicht ist es mir, aber könntest du zur Klärung dieser Frage ein bisschen?
Map map=new HashMap(); map.put("x-y-z","test-test1-test2");anzeigen.put("x1-y1-z1","test-test2-test3"); Jetzt habe ich Input string array enthält String[] rem={"x","x1"}.basierend auf dieser String-array.Ich möchte zu entfernen hashmap Werte.
Sind Sie offen für andere Daten-Strukturen? Wenn Sie eine Menge Einträge dort sind andere Strukturen (z.B. nested maps) , wird dieser Vorgang wesentlich schneller.
Besann sich die Frage 🙂 Dein Kommentar macht die Frage etwas klarer - aber wollen Sie das Anfang der hashmap der Schlüssel zu sein, im Vergleich mit jedem element des Strings, und löschen Sie den map-Wert entsprechend?
Map map=new HashMap(); map.put("x-y-z","test-test1-test2");anzeigen.put("x1-y1-z1","test-test2-test3"); Jetzt habe ich Input string array enthält String[] rem={"x","x1"}.basierend auf dieser String-array.Ich möchte zu entfernen hashmap Werte.
Sind Sie offen für andere Daten-Strukturen? Wenn Sie eine Menge Einträge dort sind andere Strukturen (z.B. nested maps) , wird dieser Vorgang wesentlich schneller.
Besann sich die Frage 🙂 Dein Kommentar macht die Frage etwas klarer - aber wollen Sie das Anfang der hashmap der Schlüssel zu sein, im Vergleich mit jedem element des Strings, und löschen Sie den map-Wert entsprechend?
InformationsquelleAutor user569125 | 2011-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowie eine aktualisierte version mit dem hinzufügen von Funktionalität basierend auf Ihrem neuesten Kommentar auf diese Antwort:
Können Sie erklären, ein wenig weiter? Meinst du das folgende? Wenn rem einen Wert enthält, z.B. x2, als nicht vorhanden, überall in der map-key-Token, fügen Sie einen Eintrag zu der Karte mit x2 als Schlüssel? Und wenn ja, mit welchen Wert?
Ja, ich vergaß zu erwähnen,dass ursprünglich das String-array bekomme ich als input String a[]={4-A06-19@A06-test-test1,2-B30-19@B30-test3-test4}.Dieses string-array ist [email protected] löschen ich habe HashMap,wenn ich obigen code,es wird funktionieren, aber für das hinzufügen HashMap nicht lieferbare mir.ich habe zu konstruieren Schlüssel und Wert in Hashmap basiert auf string-array-Eingang.
Maria:vielen Dank für den code,ich denke über Fehler,die durch Fehler, wenn pair[1] mit B-30 Statt der B30.oben Exception ArrayIndexOutofBoundsException .Ist jedenfalls um diesen Fehler zu vermeiden.
String[] pair = keyValue.split("@", 2); if (pair.Länge == 2) { Paare.put(pair[0], paar[1]); } ich aktualisiert meine Antwort entsprechend zu.
InformationsquelleAutor Maria Ioannidou
Bearbeitet, basierend auf bearbeiteten Frage.
Schleife über das keySet der hashmap. Wenn Sie finden einen Schlüssel, der beginnt mit einem x, die Sie suchen, entfernen Sie Sie aus der Karte.
Etwas wie:
y
.E wahr ist, aber im idealen Fall würde die Daten gar nicht gespeichert werden in dieser Struktur.
das ist eine viel bessere Antwort abhängig von den OP ' s Einschränkungen. Es ist auch nicht klar, dass die keys von arrays.
Ich nur test-Daten-Schlüssel könnte alles sein, sagen wir, y ist.
Wenn Sie möchten, eine übereinstimmung auf jeden Wert des Schlüssels Ursache Beseitigung Sie haben zu prüfen, für jeden Wert in Ihrem aktuellen setup.
InformationsquelleAutor jzd
Vorausgesetzt, ich verstehe Sie richtig, und Sie möchten, entfernen Sie alles, beginnend mit 'x-' und 'x1-' aus der Karte (aber nicht 'x1111-', auch wenn 'x1' ist ein Präfix von "x1111"), und die Effizienz ist wichtig, möchten Sie vielleicht, um auf einen Blick die Implementierungen von
NavigableMap
, wie (zum Beispiel)TreeMap
.NavigableMaps
halten Sie Ihre Einträge in der Reihenfolge von natürlichen Reihenfolge der Schlüssel, standardmäßig), und Durchlaufen werden können über und suchten sehr effizient.Bieten Sie auch Methoden wie
subMap
, die können produzieren eine andere Karte, die enthält die Schlüssel in einem bestimmten Bereich. Wichtig ist, diese zurückgegeben Karte ist eine live-Ansicht, was bedeutet, dass Operationen auf dieser Karte auf die ursprüngliche Karte zu.Also:
Vorausgesetzt Ihre Karte ist groß,
.subMap()
sollte viel schneller sein als die Iteration über die einzelnen Map-Eintrag (als TreeMap verwendet einen rot-schwarz-Baum für die schnelle Suche).OK, hab Sie. Dein Beispiel war nicht so klar, sorry. Also mit deinem Beispiel oben (4-A06-19@A06-test-test1,2-B30-19@B30-test3-test4) dann rem = {"B"} entfernen würde, die zweite, oder rem = {"0"} entfernen würde? In diesem Fall meine Lösung nicht helfen, und Sie müssen Durchlaufen, im Stil von Maria ' s Antwort. Dies ist nicht besonders effizient, aber solange dies Ihr problem Bereich ich denke, Sie stecken mit inefficency.
InformationsquelleAutor Cowan