Abfragen, ob schon ein Eintrag in der HashMap steht

Status
Nicht offen für weitere Antworten.

rtt

Bekanntes Mitglied
Hi,
ich schreibe in eine HachMap eine IP (Key) und die aktuelle Systemzeit (Value).
Wie kann ich abfragen, ob ein Eintrag schon in der HashMap steht oder nicht.
Wenn ja, soll die eingetragene Zeit mit der aktuellen Systemzeit verglichen werden und es soll geprüft werden, ob die eingetragene Systemzeit älter ist als 2 Sekunden.
Wenn sie älter als zwei Sekunden ist, soll der Eintrag überschrieben werden.
Wenn sie nicht älter ist, soll nix passieren.

Hier mal bisheriger code
Code:
// Abfangen von mehrfachen Klickens mit Hilfe einer Anfragenverwaltung

    HashMap hm = new HashMap();
    		
    long ms = 2000;
    Long time = new Long(System.currentTimeMillis());	// aktuelle Systemzeit     		
    boolean alreadyThere = false;
    		
    		
    // abfragen, ob schon ein Eintrag in der HashMap steht
    if(alreadyThere == true) {
        
        hm.get(ip);
        if(...).... ?
    			
    }
    else if(alreadyThere == false) {
    			
        // Elemente in die Map einfügen
        hm.put(ip,time);
    			
        // Ein Set mit Einträgen holen
        Set set = hm.entrySet();
    		
        // Einen Iterator erzeugen
        Iterator it = set.iterator();
    		
        // Elemente anzeigen lassen
        while(it.hasNext()) {
            Map.Entry me = (Map.Entry)it.next();
            System.out.print(me.getKey() + ": ");
            System.out.println(me.getValue());
        }
    			
        // Übergeben des Requests an die Methode DBentry()
        this.DBentry(image,cmdV,cmd0,cmd1,cmd2,ip,status,model);
    			
        // Wert auf true setzen, da er nun in der Map steht
        alreadyThere = true;
    }

Weiß momentan nicht weiter.
Danke für eure Hilfe
Gruß Robin
 
B

bygones

Gast
ob schon allg. etwas drinsteht geht über die größe (size()). über containsKey(Object key) erfährst du ob es was für den Key gibt...

Ich würde dir die neuen concurrent Klassen von Java empfehlen, da kannst du z.b. beim erstellen einer Map / Collection sagen, wie lange elemente drinnen bleiben dürfen, dann wird sich automatisch drumm gekümmert....
 
B

bygones

Gast
ja... aber sie waren früher eigenständig (wenn du goolgelst mit concurrent java solltest du sie finden)... glaub aber mich nur an eine solche Struktur für Collections zu erinnern....
 

rtt

Bekanntes Mitglied
wie kann ich das in Java 2 machen, da ich nicht ohne weiteres auf Java5 updaten kann.

Das müßten doch nur ein paar if-schleifen seinen oder?
Danke schonmal
Gruß Robin
 

Sky

Top Contributor
Eigentlich ganz einfach:

Code:
Object o = hm.get( ip ); // Object aus der Hashmap holen
alreadyThere = ( o != null ); // Prüfen ob dem Key 'ip' ein Wert in der Hashmap zugewiesen war.

Vgl. auch Hashmap#get
 

rtt

Bekanntes Mitglied
und wie kann ich nun prüfen, wie lange der Eintrag schon in der HashMap steht?
Ich hab ja die Systemzeit beim eintragen als Value mit eingetragen. Der Eintrag in der HashMap soll 2 Sekunden gültig sein. Es muß doch also die Eingetragene Systemzeit + Wartezeit (2sek), mit der aktuellen Systemzeit verglichen werden. Nur wie?

Es sind übrigens immer werte den Keys zugeordnet.

Gruß Robin
 

rtt

Bekanntes Mitglied
Hab mal noch etwas rum probiert, aber es funktioniert nicht.
So wie ich es jetzt habe, speichert er den Eintrag nicht in der HashMap.

Code:
    HashMap hm = new HashMap();										// erzeugen einer HashMap
    	System.out.println(hm);
    	    	
    	long ms = 2000;													// zeit, die gewartet wird in millisekunden
		Long time = new Long(System.currentTimeMillis());				// aktuelle Systemzeit (es wird ein Object erzeugt)
    	
    	Object ipx = ip;
    	boolean alreadyThere = false;
    	boolean isIPinHashMap = hm.containsKey(ipx);

    	 	    	
    	// Abfragen, ob schon ein Eintrag in der HashMap steht = nein
    	if(isIPinHashMap == false) {
    		
    		System.out.println("IP ist nicht in HashMap vorhanden");
    		
    		// Elemente in die Map einfügen
    		hm.put(ip,time);
    		System.out.println(hm+"wurde eingetragen");
    		
    		// Ein Set mit Einträgen holen
    		Set set = hm.entrySet();
    	
    		// Einen Iterator erzeugen
    		Iterator it = set.iterator();
    		
    		// Elemente anzeigen lassen
    		while(it.hasNext()) {
    			Map.Entry me = (Map.Entry)it.next();
    			System.out.print(me.getKey() + ": ");
    			System.out.println(me.getValue());
    		}
    			
    		// Übergeben des Requests an die Methode DBentry(), die die Requests in die DB einträgt
    		this.DBentry(image,cmdV,cmd0,cmd1,cmd2,ip,status,model);									
    			
    	}
    	
    		
    	// abfragen, ob schon ein Eintrag in der HashMap steht = ja
    	else if(isIPinHashMap == true){
    		
    		System.out.println("IP ist in HashMap vorhanden");
    		System.out.println(hm);
    		
    	}

Wo könnte mein Fehler liegen?
Danke schonmal
 

Bleiglanz

Gesperrter Benutzer
if(x==true) ersetzen durch if(x)

if(x==false) ersetzen durch if(!x)

Object ipx = ip; // wozu das, erzeugt nur verwirrung

boolean alreadyThere = false; // wird nicht benutzt

wenn du if(x) elseif(!x) schreibst, dann schreib lieber gleich if-else

überarbeite den ganzen Zeug nochmal und verwende folgendes gerüst
Code:
if(!hm.containsKey(ip))
{
    // dann put
}
else
{

}
So wie ich es jetzt habe, speichert er den Eintrag nicht in der HashMap.
ja und? geht er in den falschen Zweig beim if? oder was ist das Problem?
 

rtt

Bekanntes Mitglied
Danke Bleiglanz,
das mit dem "Object ipx=ip;" ist käse gewesen.
Hab den Fehler gefunden, warum er den Eintrag nicht speicherte. Er hat bei jedem durchlauf die HashMap neu angelegt. Erzeuge sie jetzt außerhalb, so das sie nur einmal erzeugt wird. Das funktioniert soweit ganz gut.

Wie kann ich jetzt den Wert der ip auslesen und mit der aktuellen Systemzeit vergleichen?
 

rtt

Bekanntes Mitglied
Hat sich mittlerweile geklärt.
Habs so gemacht:
Code:
// Abfragen, ob schon ein Eintrag in der HashMap steht = nein
    	if(isIPinHashMap == false) {
    		
    		System.out.println("IP ist nicht in HashMap vorhanden");
    		    		
    		// Elemente in die Map einfügen
    		hm.put(ip,time);
    		System.out.println(hm+" wurde eingetragen");
    		    		
    		// Ein Set mit Einträgen holen
    		Set set = hm.entrySet();
    	    	
    		// Einen Iterator erzeugen
    		Iterator it = set.iterator();
    	    		
    		// Elemente anzeigen lassen
    		while(it.hasNext()) {
    			Map.Entry me = (Map.Entry)it.next();
    			System.out.print(me.getKey() + ": ");
    			System.out.println(me.getValue());
    		}
    		   		
    		// Übergeben des Requests an die Methode DBentry(), die die Requests in die DB einträgt
    		this.DBentry(image,cmdV,cmd0,cmd1,cmd2,ip,status,model);		
    	}
    	
    		
    	// abfragen, ob schon ein Eintrag in der HashMap steht = ja
    	else if(isIPinHashMap == true){
    		
    		if (status.equals("finished")) {
    			hm.remove(ip);
    			System.out.println("Request status is finished. Remove IP from HashMap");
    		}
    		else if (status.equals("unfinished")){
    		
    			System.out.println("IP ist in HashMap vorhanden");
    			//System.out.println(hm);
    		
    			// Ein Set mit Einträgen holen und einen Iterator erzeugen
    			Set set = hm.entrySet();
    			Iterator it = set.iterator();
    	    
    	    		
    			// Elemente anzeigen lassen und prüfen auf gültigkeit
    			while(it.hasNext()) {
    				Map.Entry me = (Map.Entry)it.next();
    				
    				long time_value = ((Long)hm.get(ip)).longValue();					// aus der Hashmap holen und einem long wert zuordnen
    				System.out.println(time_value);
    			
    				if (System.currentTimeMillis() <= (time_value + ms)) {
    					System.out.println("IP ist noch gültig");
    					break;
    				}	
    				else if(System.currentTimeMillis() > (time_value + ms)){
    					System.out.println("IP ist nicht mehr gültig");
    					// Übergeben des Requests an die Methode DBentry(), die die Requests in die DB einträgt
    					this.DBentry(image,cmdV,cmd0,cmd1,cmd2,ip,status,model);
    				}
    			}
    			
    		} 									 
			
    	}

Gruß Robin
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
ven000m Bitcoin Blockhöhe abfragen Java Basics - Anfänger-Themen 12
S If abfragen (+, - , /, *) Java Basics - Anfänger-Themen 13
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
Phash Websocket abfragen Java Basics - Anfänger-Themen 1
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
M Checkbox abfragen und Radiobutton Group zurücksetzen Java Basics - Anfänger-Themen 1
L Datenpaare abfragen Java Basics - Anfänger-Themen 11
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
B Serial port abfragen Java Basics - Anfänger-Themen 18
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
T Erste Schritte Textfeld abfragen ob etwas enthalten ist. Java Basics - Anfänger-Themen 17
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
S mehrfache if-Abfragen - beste Lösung Java Basics - Anfänger-Themen 1
E Abfragen des SimpleDateFormats Java Basics - Anfänger-Themen 1
L int array abfragen Java Basics - Anfänger-Themen 16
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
Y Mehrdimensionales Array diagonal abfragen. Java Basics - Anfänger-Themen 5
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
T if abfragen verkürzen Java Basics - Anfänger-Themen 5
M Wo Hilfsvariablen abfragen? Java Basics - Anfänger-Themen 1
M Farben/Color Abfragen von Farben innerhalb einer Methode Java Basics - Anfänger-Themen 9
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
M Frage nach BestPractice in if-Abfragen Java Basics - Anfänger-Themen 1
P Anlegen und Abfragen von Array List Java Basics - Anfänger-Themen 4
R IF Abfragen Java Basics - Anfänger-Themen 8
R If Abfragen Problem! Java Basics - Anfänger-Themen 4
I Button abfragen ob er geklickt wurde Java Basics - Anfänger-Themen 4
C If Abfragen Problem Java Basics - Anfänger-Themen 46
I Drei booleans abfragen Java Basics - Anfänger-Themen 2
R Input/Output Java String abfragen Java Basics - Anfänger-Themen 3
A Vokabel abfragen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
E Checkboxen abfragen Java Basics - Anfänger-Themen 10
H if abfragen Java Basics - Anfänger-Themen 38
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
B mehrere Abfragen zusammenfügen Java Basics - Anfänger-Themen 3
H durch Schleife 50 Variablen abfragen Java Basics - Anfänger-Themen 8
B If abfragen! Java Basics - Anfänger-Themen 9
J checkbox status abfragen und drucken Java Basics - Anfänger-Themen 13
M AWT Applet - Button aus anderer Klasse abfragen Java Basics - Anfänger-Themen 4
F Bedingungen mit Abfragen verknüpfen Java Basics - Anfänger-Themen 7
P länge von array abfragen? Java Basics - Anfänger-Themen 2
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
T jNumberField auf null abfragen Java Basics - Anfänger-Themen 5
Z Erste Schritte LinkedList Werte abfragen und vergleichen Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
H Checkboxstatus abfragen Java Basics - Anfänger-Themen 10
S unzulässigen Wert abfragen - aber wo Java Basics - Anfänger-Themen 3
eLogic Aktive Internetverbindung abfragen Java Basics - Anfänger-Themen 21
B Abfragen eines Preises.. Java Basics - Anfänger-Themen 20
D Touchpad abfragen?! Java Basics - Anfänger-Themen 9
D Abfragen ob Excel-Dateien Makros enthalten? Java Basics - Anfänger-Themen 4
B Abfragen eines Excel-Feldes auf null Java Basics - Anfänger-Themen 17
B GridLayout - elemente mit Maus abfragen Java Basics - Anfänger-Themen 3
B Daten in Instanz einer Klasse ändern / abfragen Java Basics - Anfänger-Themen 12
M Datentypen String mit Trennzeichen abfragen Java Basics - Anfänger-Themen 7
D GUI Checkboxen in allen Klassen abfragen? Java Basics - Anfänger-Themen 5
B OOP String auf bestimmte Zeichen abfragen Java Basics - Anfänger-Themen 4
M Double.NaN abfragen Java Basics - Anfänger-Themen 6
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
H Objecttyp abfragen... Java Basics - Anfänger-Themen 11
N Zeilenanzahl einer TXT abfragen..? Java Basics - Anfänger-Themen 11
S Bremsen 3 IF-Abfragen ein Programm? Java Basics - Anfänger-Themen 7
T scanner bestimmtes format abfragen Java Basics - Anfänger-Themen 5
T JOptionPane mit .showInputDialog: Ergebnis abfragen? Java Basics - Anfänger-Themen 2
S Absatz aus Textdokument abfragen Java Basics - Anfänger-Themen 6
B gedrückte Tasten abfragen Java Basics - Anfänger-Themen 11
L "unschöne" if-Abfragen Java Basics - Anfänger-Themen 4
JFeel-x JComponent<-----Eigenschaften<-- Als Liste abfragen? Java Basics - Anfänger-Themen 8
P Pixelfarbe abfragen Java Basics - Anfänger-Themen 8
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
S if-Abfragen bringen mich zum VERZWEIFELN! Java Basics - Anfänger-Themen 12
B Aus JTable ImageIcon abfragen Java Basics - Anfänger-Themen 8
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
D jeditorpane checkbox abfragen? Java Basics - Anfänger-Themen 7
A Googel Lokal abfragen Java Basics - Anfänger-Themen 7
G in einem inputstream auf " " abfragen? Java Basics - Anfänger-Themen 3
T Rechner-Name abfragen Java Basics - Anfänger-Themen 6
N Event auf JTabbedPane abfragen ? Java Basics - Anfänger-Themen 8
M Maus position abfragen und setzen? Java Basics - Anfänger-Themen 1
L JTabel abfragen ob es eine erste Zeile gibt? Java Basics - Anfänger-Themen 2
G If Abfragen Java Basics - Anfänger-Themen 3
T Variablen Classübergreifen abfragen Java Basics - Anfänger-Themen 6
S Abfragen ob Label enabled ist . Java Basics - Anfänger-Themen 2
M Status von ext. Programm abfragen Java Basics - Anfänger-Themen 2
G [Applet] Mauskkoodinaten abfragen Java Basics - Anfänger-Themen 3
C String.split("") einzelne Positionen abfragen Java Basics - Anfänger-Themen 10
R Vector mit contains abfragen Java Basics - Anfänger-Themen 32
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
V thread, variable abfragen Java Basics - Anfänger-Themen 14
F Abfragen aber wie ? Java Basics - Anfänger-Themen 7
G JDialog-Status im Frame abfragen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben