vergleich zweier datenstrukturen

Status
Nicht offen für weitere Antworten.

jdsalchow

Mitglied
hi

ich möchte user verwalten, dazu bekomme ich regelmäßig eine csv liste mit den usern. diese liste will ich mit der existierenden liste vergleichen(im ldap server hinter einem dao) und die user hinzufügen, die nicht im ldap vorhanden sind und die user löschen, die nicht in der liste vorhanden sind. das funktioniert auch schon, bei ca. 1500 usern aber ziemlich langsam.

ich wandele zunächst die csv liste in eine arrayList mit hashMaps drin um und bekomme vom dao etwas ähnliches. der haken ist das vergleichen: ich iteriere erst die eine liste, und darin dann die zweite liste, weil das vergleichen(wegen fehlenden primärkeys aufwändiger ist):

Code:
for (DTO existingUser : existingUserList) {
			for (HashMap user : newUserList) {
				// if user is already existant, remove dto from both ArrayLists
				if (existingUser.get("surname").equals(user.get("surname"))
						&& existingUser.get("birthDate").equals(
								user.get("birthDate"))
						&& existingUser.get("acceptanceDate").equals(
								user.get("acceptanceDate"))) {
					log.debug("found equal user: " + user);
                                        //add is a clone of newUserList
					add.remove(user);
                                        //delete is a clone of existingUserList
					delete.remove(existingUser);
					break;
				}
			}
		}

leider habe ich keine idee wie man das optimieren könnte

mfg jdsalchow
 

Sky

Top Contributor
ohne LDAP in Gänze zu kennen: Normalerweise gibt es doch einen eindeutigen Login-Namen?? Kannste den nicht als Primary-Key verwenden??
Ansonsten: Wenn dein Tuppel {surname, birthDate, acceptanceDate} ein-eindeutig ist, so kannst Du auch dieses als Primary-Key verwenden.
 

Bleiglanz

Gesperrter Benutzer
verzichte auf die hashmaps und verwende arraylists

überschreibe equals und hashCode für dein(e) UserObjekt(e) passend

dann legst du alle LDAP user in ein ldaphashset

und dann alle csv user in ein csvhashset

dann kannst du mit addAll, removeAll oder retainAll machen was du willst

und die user hinzufügen, die nicht im ldap vorhanden sind und die user löschen, die nicht in der liste vorhanden sind
das check ich nicht? was willst du machen??

die vereinigung? den durchschnitt?
 

jdsalchow

Mitglied
verzichte auf die hashmaps und verwende arraylists

überschreibe equals und hashCode für dein(e) UserObjekt(e) passend

dann legst du alle LDAP user in ein ldaphashset

ich soll also die hashmaps durch irgendwelche erweiterten hashmaps ersetzen und gleichzeitig auf die hashmaps verzichten und durch arraylists ersetzen? hää?


dann legst du alle LDAP user in ein ldaphashset

und dann alle csv user in ein csvhashset

wie soll ich denn unterschiedliche objekte in zwei datenstruktur vergleichen, ohne jede mögliche kombination auszuprobieren. ich versteh nicht wie das schneller ist.

und die user hinzufügen, die nicht im ldap vorhanden sind und die user löschen, die nicht in der liste vorhanden sind
das check ich nicht? was willst du machen??

die csv liste die ich bekomme sind alle nutzer, so wie sie sein sollen. nutzer die in der liste nicht existieren müssen gelöscht(oder deaktiviert) werden, und nutzer die im ldap noch nicht existieren müssen hinzugefügt werden.

mfg jdsalchow
 

jdsalchow

Mitglied
ohne LDAP in Gänze zu kennen: Normalerweise gibt es doch einen eindeutigen Login-Namen?? Kannste den nicht als Primary-Key verwenden??

den login namen generiere ich selbst, der existiert nicht in der csv liste

Ansonsten: Wenn dein Tuppel {surname, birthDate, acceptanceDate} ein-eindeutig ist, so kannst Du auch dieses als Primary-Key verwenden.
wie denn? und wie kann ich dann prüfen, ob die in einer datenstruktur vorhanden sind?
 

Sky

Top Contributor
jdsalchow hat gesagt.:
wie denn? und wie kann ich dann prüfen, ob die in einer datenstruktur vorhanden sind?

Wenn Du einen Primary-Key brauchst, und die genannten Parameter zusammen eindeutig sind, so kannst Du diese zu einem String zusammenfügen: z.B. Mueller_17091966_01012004.

Ansonsten ist die Verwendung von Hashsets -wie Bleiganz sagte- wahrscheinlich besser, da Du dort keinen Key mehr zusammenbauen musst.
 

Bleiglanz

Gesperrter Benutzer
wie soll ich denn unterschiedliche objekte in zwei datenstruktur vergleichen, ohne jede mögliche kombination auszuprobieren. ich versteh nicht wie das schneller ist.
was glaubst du wohl, wofür die Collections API da ist

mit HashSet#contains findest du einen eintrag wesentlich schneller, als durch durchiterieren; deshalb würde ich die Benutzher aus beiden Quellen via Decorator unter ein einziges "User" Objekt einwickeln und für dieses HashCode und Equals überschreiben...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Vergleich zweier Felder Allgemeine Java-Themen 3
F Vergleich zweier Listen Allgemeine Java-Themen 4
N Vergleich zweier Hashtable / mehrere Enumerations Allgemeine Java-Themen 7
Neumi5694 double Vergleich Allgemeine Java-Themen 19
M Vergleich C# und Java Allgemeine Java-Themen 24
D Vergleich OracleJDK/OpenJDK Allgemeine Java-Themen 7
T Komplexitätsoptimierung String vergleich Allgemeine Java-Themen 4
T If Vergleich ergibt nicht das richtige Ergebnis Allgemeine Java-Themen 2
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
E Problem mit Array vergleich Allgemeine Java-Themen 4
M Vergleich (unscharf) von Screenshots Allgemeine Java-Themen 0
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
M Datums vergleich klappt überhaupt nicht.. Allgemeine Java-Themen 4
S Calendar vergleich Allgemeine Java-Themen 2
G Zeilenweiser Vergleich Allgemeine Java-Themen 10
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
K GUI-Button Inhalte vergleich - TicTacToe Grundriss Allgemeine Java-Themen 11
N Vergleich von generischen Typen Allgemeine Java-Themen 2
S String-Vergleich in if Allgemeine Java-Themen 7
P JNA - JNI - pures Java - Vergleich Allgemeine Java-Themen 6
M Vergleich von TreeSet<HashSet>^2 Allgemeine Java-Themen 8
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
D Was ist schneller? Zuweisung oder Vergleich? Allgemeine Java-Themen 18
O String NICHT vergleich Allgemeine Java-Themen 7
G Vergleich von .jpg Dateien Allgemeine Java-Themen 2
I vergleich und zählen von Strings Allgemeine Java-Themen 7
K Vergleich von Icons . Allgemeine Java-Themen 8
N vergleich mit while und for schleife Allgemeine Java-Themen 7
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
minzel String in String (Vergleich) Allgemeine Java-Themen 2
P Vergleich: Java - .net Allgemeine Java-Themen 5
T Vergleich von Tastatureingabe mit dem was in der Datei steht Allgemeine Java-Themen 21
N Split -> IF-String vergleich Allgemeine Java-Themen 5
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
B bit vergleich oder regex Allgemeine Java-Themen 1
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
B Kollision zweier Kugeln im R² Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
T Parallelisierung zweier BigInteger-Funktionen Allgemeine Java-Themen 6
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
P gegenseitige Methodenaufrufe zweier Klassen Allgemeine Java-Themen 14
MQue Verbindung zweier Klasse Allgemeine Java-Themen 13
D Generalisierungsbeziehung zweier Klassen Allgemeine Java-Themen 5
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
Z Verknüpfung zweier Klassen! Allgemeine Java-Themen 2
M run()-Code zweier Threads strikt abwechselnd ausführen Allgemeine Java-Themen 7
D Algorithmen und Datenstrukturen in Java Allgemeine Java-Themen 40
S Algorithmen und Datenstrukturen Allgemeine Java-Themen 1
A Datenstrukturen Allgemeine Java-Themen 2
M Algorithmen und Datenstrukturen Allgemeine Java-Themen 6
A Datenstrukturen richtig anlegen/laufzeitanalyse Allgemeine Java-Themen 10
N Datenstrukturen an neue Klasse übergeben Allgemeine Java-Themen 16
M Aufgabenstellung unklar (Vorlesung Algorithmen und Datenstrukturen..) Allgemeine Java-Themen 2
D Multiple Datenstrukturen erstellen Allgemeine Java-Themen 4
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
D Listen / Datenstrukturen und ein blutiger Anfänger Allgemeine Java-Themen 7
M Effiziente Datenstrukturen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben