Elemente einer Map vergleichen

Status
Nicht offen für weitere Antworten.

dansmo

Mitglied
Hallo,

ich habe folgende Map, deren Elemente ich vergleichen möchte:

Java:
public Map<Integer,String> werte = new HashMap<Integer,String>();

Der Vergleich soll so aussehen, dass ich ein true bekommen möchte, wenn die Elemente
der Keys 0-n folgendem Muster gehorchen:

Element des Keys n equals Element des Keys n+2

Wie kann ich das prüfen?
 
Zuletzt bearbeitet:
du durchläufst sowieso erstmal alle Keys oder Entries, hast also immer ein n und direkt oder blitzschnell dazugeladen das zugehörige Element
(wenn du soweit nicht kommt, musst du über alles andere noch gar nicht nachdenken)

nun ist es doch lockerleicht, n+2 auszurechnen, dazu das Element auch zu laden und zu vergleichen,
wo besteht die Schwierigkeit außer die handvoll Bestandteile alle zu programmieren? das musst du natürlich machen
 
Naja, ich hätte es jetzt so gemacht:
Java:
	 for(int j = 0; j<= 6; j++){
			 if(!werte.get(j).equals(werte.get(j+2))) return false;
     }

Ich hatte aber vage in Erinnerung, dass es dafür extra Funktionen gibt, die das evtl. etwas schneller hinkriegen!?
 
bist du dir sicher, dass alle Elemente immer enthalten sind? sonst noch nicht vorhandene (null) berücksichtigen,
n = 6 ist auch vorgegeben, nicht eher vom aktuellen Inhalt der Map abhängig?
bei derartigen Keys bietet sich ja eher eine Liste oder ein Array statt einer Map an,

wenn man aber voraussetzt, dass von 0 bis 8 alles in der Map enthalten ist, und genau das geprüft werden sollen,
dann ist dieser Code quasi nicht zu verbessern,
was schnelleres gibt es nicht und es kann auch keine Funktion geben die derart individuelles ausrechnet
 
Zuletzt bearbeitet von einem Moderator:
Das ich eine Map gewählt habe, hat den Grund, dass die Elemente in einer anderen Methode ständig ersetzt werden.

Ich habe vorher die prüfung
Java:
if(werte.size() >= 6){

}
und 6 ersetze ich dann noch durch n, die 6 war ja nur ein Beispiel.

Danke für die Besätigung, dass es nicht schneller geht.
 
Du kannst auch über
Code:
werte.keySet()
über alle Schlüsselwerte iterieren:
Java:
for (Integer key : werte.keySet())
{
    // ...
}
 
@KrokoDiehl

Wie geht das genau? Welche Vorteile/Nachteile hat das?
Angenommen n ist immer relativ klein, macht es dann Sinn sich mit KeySet zu befassen, ich habe nämlich null Ahnung davon.

btw: wie markiere ich einen Thread als erledigt? --> jetzt hat mich der Button aber fast gebissen ;-)
 
Naja, das
Code:
keySet()
ist nur eine Menge mit allen Schlüsseln der Map. Wenn deine Map die Schlüssel 0 bis 6 enthält, macht sie nichts anderes wie die for-Schleife, aber wenn deine Schlüssel Lücken haben, oder eben keine einfachen Integer sind, ist es imho besser via
Code:
keySet()
über die ganze Map zu laufen.

Die Schreibweise
Code:
for(Integer key : werte.keySet())
ist nur die neue Form der for-Schleife
Java:
Set<Integer> keys = werte.keySet();
for(int i = 0; i < keys.size(); i++)
{
    Integer currentKey = keys.get(i);
    ...
}
Man kann es auch via Iterator machen:
Java:
Iterator<Integer> iter = werte.keySet().iterator();
while (iter.hasNext())
{
    iter.next();
    ...
}

Das macht alles das gleiche. Meine Meinung dazu ist: Via k
Code:
eySet()
ist man auf der sicheren Seite, weil man dann nur über Schlüssel iteriert, die auch vorhanden sind. Natürlich kann man sich das je nach konkretem Beispiel sparen, weil es unnötig ist oder viell. auch die Lesbarkeit verschlechtert.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben