Hash Set hälfte entfernen

bluetrix

Mitglied
Ich habe ein Hash Set von Strings ich will dieses Set jetzt halbieren und eine hälfte removen dass hash Set wird dannach noch verändert dass sage ich da ich online gelesen habe dass es dann zu Problemen kommen kann wenn man ein hash set ändert nachdem man den Iterator erstellt hat wie mache ich das am besten ? Falls ihr Mehr Infos braucht oder Code sehen wollt teile ich gerne aber denke dass es eher was allgemeines ist
 

KonradN

Super-Moderator
Mitarbeiter
Da ist jetzt die Frage, was genau Du für Veränderungen hast und wie Du damit umgehen willst.

Das erste Problem ist: Iterator und entfernen von Elementen. Das kannst Du lösen, in dem Du die remove Methode des Iterators nutzt (so der Iterator das unterstützt).

Wenn Du mehrere Threads hast, die auf das Set zugreifen, dann wird es ggf. schwerer. Da ist die Frage, wie Du auf die Veränderung reagieren willst. Das ist halt noch nicht genau festgelegt. Beispiel: Du hast 10 Elemente im Set. Du willst die Hälfte entfernen. Während Du 5 Elemente entfernst werden aber nun 2 weitere Elemente hinzugefügt. Sollen diese noch berücksichtigt werden?

Je nachdem, was das genaue Problem ist, kann man das per Code lösen. Du kannst Zugriffe auf das Set synchronisieren: Solange ein Prozess läuft können keine anderen Dinge passieren. Sprich: Das Hinzufügen von den 2 Elementen kann erst erfolgen, wenn das Entfernen der 5 Elemente erfolgt ist. Das ist nur eine Möglichkeit.

Daher ist wirklich immer die Frage wichtig, die ich am Anfang gestellt habe: Was passiert alles mit dem Set und was für ein Verhalten erwartest Du?
 

bluetrix

Mitglied
Ja an remove hatte ich auch schon gedacht und etwas rum probiert jedoch stoße ich immer sobald ich ein remove habe auf den selben irrsinnig langen Fehler den ich nicht entziffern kann

Java:
public void amnesia() {
        System.out.println("Amnesia Pressed"); //Bestätigung dass Methode aufgerufen wurde / Button gedrückt
        Iterator<String> It = bannedSituations.iterator(); //Iterator für Set banned Situations anlegen
        int size = bannedSituations.size();    //größe des Sets
           
            for (int i = 1; i <= size / 2; i++) { //For Schleife die solange aufgerufen wird bis die hälfte des Sets durch ist
                String str = It.next();
                bannedSituations.remove(str);
                System.out.println(str);
            }
       
        storeMemory(); // neues set wird abgespeichert
    }

Der Fehler bzw Konsolen ausgabe:
Amnesia Pressed
Exception in thread "JavaFX Application Thread"
[ B/BW / B/WW /]@W <- Das ist der Print von System.out.println(str);
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724)
at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@18.0.1/javafx.scene.Node.fireEvent(Node.java:8797)
at javafx.controls@18.0.1/javafx.scene.control.Button.fire(Button.java:203)
at javafx.controls@18.0.1/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
at javafx.controls@18.0.1/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@18.0.1/javafx.scene.Scene$MouseHandler.process(Scene.java:3881)
at javafx.graphics@18.0.1/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
at javafx.graphics@18.0.1/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2607)
at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
at javafx.graphics@18.0.1/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
at javafx.graphics@18.0.1/com.sun.glass.ui.View.notifyMouse(View.java:937)
at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at javafx.base@18.0.1/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml@18.0.1/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1852)
... 46 more
Caused by: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1486)
at java.base/java.util.TreeMap$KeyIterator.next(TreeMap.java:1540)
at MiniChessKernelV03/memory.MiniChessBasicMemory.amnesia(MiniChessBasicMemory.java:101)
at MiniChessApplicationV03/view.stages.primary.MiniChessGUIController.handleAmnesieButton(MiniChessGUIController.java:201)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
... 53 more
 

bluetrix

Mitglied
Update: Ich habe gerade herausgefunden dass es mit der for-Schleife zusammen hängen muss wenn ich diese ausklammere und somit nur das erste element des sets entferne funktioniert alles blendend was aber mit der For schleife falsch ist weiß ich nicht
 

bluetrix

Mitglied
Fehler war doch nicht in der for schleife ich habe anstatt
Java:
It.remove()
Das gemacht
Java:
bannedSituations.remove(str);
 

Oneixee5

Top Contributor
Java:
        final Set<String> set = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7"));
        int l = set.size() / 2;
        for (final Iterator<String> iterator = set.iterator(); iterator.hasNext(); l--) {
            iterator.next();
            if (l <= 0) {
                iterator.remove();
            }
        }
        set.forEach(System.out::println);
oder auch:
Java:
        Set<String> set = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7"));
        set = set.stream().limit(set.size() / 2).collect(Collectors.toSet());
        set.forEach(System.out::println);
 

mihe7

Top Contributor
Ich habe ein Hash Set von Strings ich will dieses Set jetzt halbieren und eine hälfte removen dass hash Set wird dannach noch verändert dass sage ich da ich online gelesen habe dass es dann zu Problemen kommen kann wenn man ein hash set ändert nachdem man den Iterator erstellt hat wie mache ich das am besten
Zwischendrin mal ein Punkt oder Komma wäre ganz nett gewesen ;)

Der Vollständigkeit halber sei noch retainAll() bzw. removeAll() erwähnt: erst die zu behaltenden bzw. zu löschenden Elemente in z. B. einem neuen Set speichern und dann als Parameter der betreffenden Methode verwenden. Das wäre insbesondere verwendbar, wenn man am Ende zwei Sets haben möchte. Auch removeIf() kann ggf. zur Anwendung kommen. Das hängt aber alles vom Einzelfall ab.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
L Programmierung mit Hash Java Basics - Anfänger-Themen 3
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
B Denkanstoß - Hash ID für URL Java Basics - Anfänger-Themen 7
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
4a61766120617274697374 sha hash Java Basics - Anfänger-Themen 10
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
B Vererbung In offener Hash Tabelle einfügen Java Basics - Anfänger-Themen 4
T Hash von doubles generieren Java Basics - Anfänger-Themen 5
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
E Hash Code dekodieren? Java Basics - Anfänger-Themen 20
T Hash Map Java Doc Einführung Java Basics - Anfänger-Themen 9
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
L MD5 Hash berechnen Java Basics - Anfänger-Themen 2
P Casten Hash Map Java Basics - Anfänger-Themen 4
F Hash problem Java Basics - Anfänger-Themen 29
W automatischer password hash Java Basics - Anfänger-Themen 11
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
E Hash Map?? Java Basics - Anfänger-Themen 12
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
J Hash-Maps / ArrayLists testen Java Basics - Anfänger-Themen 12
I Hash Wert von Dateien erzeugen Java Basics - Anfänger-Themen 2
H java hash map: cd ablageprogramm Java Basics - Anfänger-Themen 2
G Implementieren einer Hash-Datenstrucktur Java Basics - Anfänger-Themen 3
C MD5-Hash in Java Java Basics - Anfänger-Themen 14
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
ven000m Rauten "Stern" zeichnen, hälfte habe ich zweite? Java Basics - Anfänger-Themen 2
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
L Buchstaben entfernen zipZap Java Basics - Anfänger-Themen 8
padde479 Zeile entfernen TableModel Java Basics - Anfänger-Themen 11
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
Lion.King Dupklikationen entfernen Java Basics - Anfänger-Themen 4
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
T Leerzeichen im String entfernen Java Basics - Anfänger-Themen 6
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
J String aus einem Array entfernen Java Basics - Anfänger-Themen 10
X Erste Schritte String: Alle doppelten Leerzeilen entfernen Java Basics - Anfänger-Themen 21
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
E Nullen aus Nachkommastellen entfernen Java Basics - Anfänger-Themen 2
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
O Methode um Vokale zu entfernen UNSCHOEN! Java Basics - Anfänger-Themen 8
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
Dimax Leerzeilen aus einem String entfernen Java Basics - Anfänger-Themen 61
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
C Zeichen im String bis zu bestimmter Stelle entfernen Java Basics - Anfänger-Themen 6
C Entfernen des ersten String-Elements Java Basics - Anfänger-Themen 6
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
R Buchstabe aus String entfernen Java Basics - Anfänger-Themen 13
D Leerzeichen entfernen Java Basics - Anfänger-Themen 4
J Objekt aus Liste entfernen Java Basics - Anfänger-Themen 20
A Folgende Nullen einer Kommazahl aus String entfernen Java Basics - Anfänger-Themen 3
H Gerade Zahlen aus Array entfernen Java Basics - Anfänger-Themen 8
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
H Erste Schritte String Vokale entfernen Java Basics - Anfänger-Themen 11
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
O JTextPane / JtextArea Zeilenabstand entfernen Java Basics - Anfänger-Themen 1
P Java Leerzeichen in der Ausgabe entfernen Java Basics - Anfänger-Themen 3
I in listFiles() oder JList Dateiendungen entfernen Java Basics - Anfänger-Themen 14
S Leerzeichen zwischen zwei Zeichen im String entfernen Java Basics - Anfänger-Themen 19
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
S Logging Code komplett von Compiler entfernen lassen..? Java Basics - Anfänger-Themen 5
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
S String aus String entfernen Java Basics - Anfänger-Themen 2
Q Kommastellen hinter double wert entfernen Java Basics - Anfänger-Themen 5
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
M bestimmten Teil eines Strings entfernen Java Basics - Anfänger-Themen 4
G Multiple Leerzeichen entfernen Java Basics - Anfänger-Themen 13
H Redundante Elemente aus ArrayList entfernen Java Basics - Anfänger-Themen 3
S Umlaute aus Dateisystem entfernen Java Basics - Anfänger-Themen 5
L 0 nach Komma entfernen Java Basics - Anfänger-Themen 9
S NumberFormat Tausender Zeichen entfernen? Java Basics - Anfänger-Themen 4
A ; entfernen Java Basics - Anfänger-Themen 3
R Vokale aus String entfernen Java Basics - Anfänger-Themen 11
A Elemente aus Liste entfernen Java Basics - Anfänger-Themen 5
G Long oder int Vorzeichen entfernen Java Basics - Anfänger-Themen 3
J Duplikate aus Liste entfernen Java Basics - Anfänger-Themen 16
A Threads Zur Laufzeit hinzufügen/entfernen Java Basics - Anfänger-Themen 10
C Variablen array element hinzufügen/entfernen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben