Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
habe folgendes Problem:
Ich habe einmal in einer ArrayList Werte gespeichert und das andere mal dieselben Werte in einer HashMap. Diese muss ich nun vergleichen und möchte die Werte aus der ArrayList in eine HashMap eintragen.
Aber wie?
Habe schon versucht mit einer Schleife über die ArrayList zu laufen und durch put und get-Methoden die Werte irgendwie in die HashMap zu bekommen...klappt aber nicht
Ich habe einmal in einer ArrayList Werte gespeichert und das andere mal dieselben Werte in einer HashMap. Diese muss ich nun vergleichen und möchte die Werte aus der ArrayList in eine HashMap eintragen.
Willst du nun vergleichen, sind die Werte schon gleich oder willst du eintragen?
Wenn die Einträge in Map und List schon gleich sind, erübrigt sich doch alles andere ???:L
In Array-List habe ich Werte aus einem xml-Dokument ausgelesen.
Und in der Hash-Map habe ich SChlüssel und Werte aus einer Properties-geladen (es ist auch keine richtige Hash-Map sondern ein Objekt der Klasse Properties, die ja von Hash-Map abgeleitet ist, daher spielt das ja eigentlich keine Rolle).
Ich weiß nicht ob alle Properties-Dateien so aufgebaut sind, aber bei der mit der ich arbeite ist in jeder Zeile ein der Schlüssel, dann folgt ein '=' und dann kommt der Wert.
Diese Werte will ich nun mit denen aus dem xml-Dokument (sind jetzt in der ArrayList) vergleichen und dazu muss ich die Werte aus der ArrayList in eine HashMap bekommen. Oder irre ich mich?
das macht in keinster Weise Sinn,
eine Map enthält Schlüssel-Werte-Paare, für
auto=opel
also "auto" -> "opel"
wie kannst du nun circa 70x sagen, dass in der ArrayList der gleiche 'Wert' enthalten ist?
was denn genau??
ein String "auto=opel"
oder nur der key oder nur der value oder wie?
in jedem Fall gilt:
wenn du die ArrayList-Werte in die Map speicherst hast du es auch nicht unbedingt leichter mit dem vergleichen,
gehe so vor:
1.)
durchlaufe die ArrayList und prüfe für jeden 'Wert', ob er auch in der Map enthalten ist
2)
durchlaufe die Map und prüfe für jeden 'Wert (Wert-Paar?)', ob er/ es auch in der Liste enthalten ist
ok, bei einer großen Liste wäre das prüfen auf Enthaltensein in der Liste nicht sehr performant,
aus diesem Grunde wäre es tatsächlich ratsam, den Inhalt der ArrayList zum schnelleren Zugriff in einer Map zu speichern
es geht mir nur um den Wert (value).
Diese sollten halt mit den Einträgen aus der ArrayList übereinstimmen.
Ich entwickle das Projekt nur weiter. Als ich damit angefangen hab waren die Werte aus bestimmte xml-Dokumente bereits in der Array-List.
Außerdem waren zwei Objekte der Klasse Properties anglegt (myProperties und compareProperties).
In myProperties stehen nun die Strings aus der Properties-Datei.
Und ich soll die Werte aus den xml-Dokumenten in das Objekt compareProperties stecken.
Dann sollen myProperties und compareProperties verglichen werden
habe folgendes Problem:
Ich habe einmal in einer ArrayList Werte gespeichert und das andere mal dieselben Werte in einer HashMap. Diese muss ich nun vergleichen und möchte die Werte aus der ArrayList in eine HashMap eintragen...
Ich hab einfach vorausgesetzt, dass die in der gleichen reihenfolge sind
wenn es noch anders sein soll, kann man das ja leicht modifizieren :wink:
#edit 1
das ist meine lösung, da aus der aufgabe oder frage nicht herausging, ob die reihenfolge eine rolle spielt.
das lieb ich ja immer so an den ganzen fragen/aufgabenstellungen... schwammig, unvollständig... da kann man nicht ne vollständige lösung erwarten
#edit 2
überarbeitete version für SlaterB
ohne rücksicht auf doppelte einträge :noe:
Code:
public static <T> boolean isEqual( HashMap<Integer, T> hashmap, ArrayList<T> list )
{
// if( hashmap.size() != list.size() ) return false; // kann man sich jez auch sparen
Iterator<T> hmIt = hashmap.values().iterator();
// Iterator<T> liIt = list.iterator();
while( hmIt.hasNext() )
{
// if( !hmIt.next().equals( liIt.next() ) )
// return false;
if( !list.contains( hmIt.next() ) )
return false;
}
return true;
}
das sind Schablonen für verschiedene Typen von Objekten. Damit du nicht, wenn du mal eine Liste mit Strings und das andere mal eine Liste mit Integers erhälst, die immer neu schreiben musst...
> Ich hab einfach vorausgesetzt, dass die in der gleichen reihenfolge sind
das ist ja keine Kritik sondern die lustige Form des Hinweises
'die Reihenfolge von map.values.iterator() ist undefiniert'
wobei ich allerdings nie getestet habe, obs nicht vielleicht die Einfügereihenfolge ist
ob die so angeordnet sind, wie die reingingen, weiß ich auch nicht... ich weiß nur, dass das so bei sämtlichen queue's und beim vector ist -> fifo-prinzip
selber coden macht schlau... die hinweise, und wie es geht, hast du ja daliegen, mussu dich nur mal selber ransetzten und dir die finger wund hauen auffer tasta :lol:
"ich mache irgendwas und bin noch nicht zufrieden,
ich helfe aber nicht bei der Sache sondern frage einfach mal nach blinden weiteren Lösungen unter denen ich mir dann eine aussuche"
es gab eine kleiner Änderung im Programm.
Die Liste und die HashMap wurden erhalten.
In der Liste sind die nun die Werte aus der XML-Datei und in der Hashmap sind Keys aus einer Properties Datei geladen wurden. (Value ist momentan null).
Die Einträge in der Liste sollten mit den Keys aus der HashMap übereinstimmen.
Nun muss ich diese halt vergleichen. Meine Idee:
Syntaktisch auch kein Problem. Allerdings werden auf der Konsole alle Werte des It1 ausgegben mit einem "falsch" dahinter. Obwohl ich mir sicher bin, dass einige Einträge aus der Liste mit denen der HashMap übereinstimmen.
Woran kann das liegen??
Und nochwas: Die gefunden übereinstimmenden Werte sollen in eine Entry-Klasse angelegt werden:
[/code] while (It2.hasNext ()) {
//System.out.println (It1.next ());
if (placeholderList.contains (It2.next())) {
System.out.println ("richtig");
if (It1.hasNext ()) {
It1.next ();
}
} else {
if (It1.hasNext ()) {
System.out.println (It1.next () + " falsch");
}
}
}
Code:
Wofür ist eine solche Entry-Klasse und wie funktioniert sie???
Danke
ich weiß nicht wie es den anderen geht, aber ich sehe zwischen Maps, Listen, Properties und nun auch noch seltsamen 'Entry-Klassen' nicht durch,
fang doch mal an, Schritt für Schritt zu erklären, worum es überhaupt geht
---------
und dass du nicht verstehst, warum
placeholderList.contains (It2.next()))
immer false ergibt ohne weiter nachzuforschen, ist nicht zu akzeptieren,
gib doch mal alle Werte von placeholder sowie den Wert It2.next() aus,
dann ist es doch offensichtlich was wo übereinstimmt oder nicht...,
und wie überall: fange mit kleinen Listen/ Maps mit 2-3 Einträgen an,
poste hier nicht hundert Werte
also die Werte von placeholderList sowie von It2.next() habe ich schon ausgegeben.
Es gibt definitv übereinstimmende Einträge. Deswegen blick ich ja selbst nicht durch
Ok, ich fang dann mal an etwas über die Geschichte des Programms zu erzählen
Das Programm wurde von meinem Kollegen aus dem 1 Lj angefangen und ich soll es nun fertigstellen.
Der Kollege hatte die Aufgabe aus verschiedenen xml-Dokumenten alle Strings rauszuschneiden, die zwischen zwei geschweiften Klammern stehen (mit JDOM und SAX gelöst).
Die Strings zwischen { und } sind in der Liste placeholderList.
Meine Entwicklungen:
Ich hatte einer .properties Datei. Diese Datei ist wie eine HashMap aufgebaut. Für jeden Key gibts hinter einem '=' ein value. Diese Datei habe ich nun in ein Objekt der Klasse Properties geladen (Properties wird von HashMap abgeleitet).
Die Keys des Properties-Objekt muss ich nun mit den Einträge aus der Liste placeholderList vergleichen. Mein Versuch:
Diese hat mein Ausbilder angelegt und gesagt ich soll mich im Internet darüber informieren. Ich konnte aber nichts brauchbares finden.
Die übereinstimmenden Werte aus placeholderList und It2.next() soll ich in diese Entry-Klasse stecken (wenn denn endlich mal übereinstimmende Werte vom ersten Code-Beispiel zurückgegeben werden )
Aber ich weiß nicht was diese Entry-Klasse macht und wofür sie gut ist.
Vielleicht kann mir ja nun jemadn weiterhelfen :lol:
zuviel Info ist meist besser als zuwenig
aber Xml, JDom, Sax, .properties usw. sind Banane,
bitte nur beim Thema bleiben und vor allem kleine Ausschnitte betrachen
a la
"Hier ist Liste placeholder mit Werten x,y,
Properties-Objekt compareProperties mit y,z und folgender Code"
woher das alles kommt oder hingeht interessiert nicht
-------------
'static class' gibts in Java nicht ...
----------
> Obwohl es definitv gleiche Werte gibt
> Aber warum??
super, nix gelernt,
immer noch nicht die Werte ausgegeben,
inzwischen kann man sogar bezweifeln, ob sie überhaupt den gleichen Typ haben,
was ist denn da drin, String, Entry-Objekte, ...? ist überhaupt equals definiert?
Ausgabe!
und wenn du immer noch nicht überzeugt bist, dann vergleiche Wert um Wert:
Code:
Wert vergleich = ..;
for (int i=0; i<list.length; i++) {
Wert wertInListe = liste.get(i);
// Klassen der beiden Objekte ausgeben, mit equals vergleichen
// bei String zeichenweise vergleichen, bytes ausgeben usw.
}
Gibt es schon, aber nur als Innere Klasse. Daher denke ich mal TH_C hat zusammenhanglos aus einer anderen Klasse die Entry Klasse rauskopiert.
@TH_C: Wie schon SlaterB gesagt hat, gib die Werte aus oder debugge doch einfach mal deinen Code und schau Dir genau an was du genau wie vergleichst. Damit findest Du sicher schnell dein Problem.