Duplikate finden

Status
Nicht offen für weitere Antworten.
M

MrVertigo

Gast
Hallo,

ich habe eine Liste von Daten (die in einer Datei steht oder aus der DB kommt), wobei jeder Datensatz eine ID hat, die nicht immer eindeutig ist.
Nun soll ich die List von Daten durch gehen und die Duplikate (IDs) raus filtern.

Mein erste Ansatz war eine HashMap anzulegne in der ich die ID speichere.
Ich nehme mir also ein Element von der List, ueberpruefe ob die dazugehoerige ID schon in der HashMap ist. Ist sie noch nicht in der HashMap dann packe ich sie mit in die HashMap und den dazugehoerigen Datensatz wird in die Ausgangsdatei geschrieben. Wenn die ID schon in der HashMap ist, dann passiert gar nichts.

Das ganze funktioniert ganz gut mit kleinen Datensaetzen. Aber wenn ich das ganze fuer grosse datenSaetze ausfuehre dann wird sehr viel CPU in Anspruch genommen und dann ganze wird hinten heraus sehr sehr langsam.

Hat jemand eine Idee wie man die Duplikate noch heraus filtern koennte?
 
G

Gast

Gast
Was heißt den etwas konkreter groß und klein?

Du könntest ja im ersten schritt nur mit den IDs arbeiten und erst wenn du daraus eine eindeutige Liste erzeugt hast, die konkretn Daten aus der DB abfragen und umkopieren, oder sonst was damit anstellen.
 
S

SlaterB

Gast
sowas kann nicht lange dauern,
in einer Sekunde musst du mehr überprüfen können als überhaupt Objekte in den Arbeitsspeicher passen,
vom Laden/ Speichern/ Löschen dieser Daten ganz abgesehen,

speicherst du die fraglichen Objekte in der HashMap? brauchst du sie überhaupt?
reicht es nicht, nur die Ids zu speichern, dann ginge auch ein HashSet, welches intern aber auch nur eine HashMap verwendet

finde heraus, wie es zu der Langsamkeit kommt, was in der fraglichen Zeit alles passiert,
verwende testweise zum Zeitpunkt der Langsamkeit eine neue leere HashMap statt der alten (-> hats mit der Map zu tun oder nicht)

um wieviele Einträge gehts überhaupt, woher kommen die Daten?
 
M

MrVertigo

Gast
Meiner Meinung nach ist das problem die HashMap die zu gross wird. Die ganze Verarbeitung der Daten hat ja funktioniert, nur wurden die Daten bis jetzt nicht auf Duplikate ueberprueft, was nun aber so sein soll.
Also den Teil der die Daten aus der DB holt und den Teil der die Daten dann in das File schreibt habe ich nicht geaendert.

Ich habe nur den Check eingefuegt, der bevor eine Zeile in die Datei geschrieben wird, laeuft.

Nur die IDs aus der DB holen bringt nichts, denn das macht den Prozess noch langsamer.

Um Speicher zu sparen, speichere ich nur die ID in der HashMap, als Object gebe ich NULL mit.

Es handelt sich um ca 1 000 000 Datensaetze.
 
S

SlaterB

Gast
Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        long time = System.currentTimeMillis();
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < 1000000; i++)
        {
            list.add(Integer.valueOf((int)(Math.random() * 900000)));
        }
        System.out.println("time1: " + (System.currentTimeMillis() - time));
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        Integer test = Integer.valueOf(-1);

        int countDouble = 0;
        for (Integer k : list)
        {
            if (map.put(k, test) != null)
            {
                countDouble++;
            }
        }
        System.out.println("time2: " + (System.currentTimeMillis() - time) 
             + ", double: " + countDouble);

    }
}

--------

Ausgabe:
time1: 562
time2: 1578, double: 395948
dauert also ungefähr eine Sekunde für 1 Mio. Objekte,

wenn jedes derartige Objekt 1000 Bytes belegt, dann kommt meine Aussage '1 Sekunde für ganzen Speicher' ja ganz gut hin ;)
(wären dann ~1GB)

ich habe hier noch Objekte in die Map gespeichert, um nicht erst contains zu testen und dann noch einzufügen,
so macht es ein HashSet auch, welches du statt der Map verwenden könntest

-----

was dein Programm ansonsten langsam macht, kann ich derzeit nicht erahnen,
die Map braucht 20 MB Speicher
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Duplikate in Array finden... Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
M Liste ohne Duplikate Java Basics - Anfänger-Themen 8
I Input/Output 3 Werte in Datei schreiben, duplikate vermeiden Java Basics - Anfänger-Themen 4
E Listen und Duplikate Java Basics - Anfänger-Themen 2
E Array untereinander auf Duplikate prüfen Java Basics - Anfänger-Themen 8
J Duplikate aus Liste entfernen Java Basics - Anfänger-Themen 16
N Suche Technik um Wert-Duplikate auszuschließen Java Basics - Anfänger-Themen 3
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
G Geht das effizienter?: Einlesen > Duplikate entf > Spe Java Basics - Anfänger-Themen 13
B Best Practice Schaltfläche im Bild finden Java Basics - Anfänger-Themen 8
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
J for Schleife kleinste Zufallszahl finden Java Basics - Anfänger-Themen 25
Substring in einem String finden Java Basics - Anfänger-Themen 13
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
districon Java Nachhilfe - wo finden? Java Basics - Anfänger-Themen 9
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
M Datums-Palindrome finden Java Basics - Anfänger-Themen 9
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
S Schwachstelle finden Java Basics - Anfänger-Themen 11
D kleinste Wurzel finden Java Basics - Anfänger-Themen 9
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
J Lösungen zu einem Lückentext finden Java Basics - Anfänger-Themen 0
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
L Koordinate mit meisten Überlappungen in 3D-Raum finden Java Basics - Anfänger-Themen 9
KogoroMori21 Größten gemeinsamen Teiler finden Java Basics - Anfänger-Themen 7
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
I Preis finden für ein Uber-App(?) Java Basics - Anfänger-Themen 3
D Binärbaum Blätter finden und Ausgeben Java Basics - Anfänger-Themen 22
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
H pfad finden Java Basics - Anfänger-Themen 12
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
S Substrings finden Java Basics - Anfänger-Themen 5
C Finden mehrerer Lösungen Java Basics - Anfänger-Themen 0
L Backupdateien finden Java Basics - Anfänger-Themen 8
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
N Anfang eine Array Schleife finden Java Basics - Anfänger-Themen 18
D Erste Schritte Aktivsten Zweistündigen Abschnitt finden Java Basics - Anfänger-Themen 35
I Richtige Java-Version finden? Java Basics - Anfänger-Themen 17
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
M Denn dichtesten Wert finden Java Basics - Anfänger-Themen 3
N Objekte in ArrayList finden Java Basics - Anfänger-Themen 10
D Die Zahl in der Mitte finden Java Basics - Anfänger-Themen 20
kilopack15 Größte zahl eines Arrays finden Java Basics - Anfänger-Themen 1
H Fehler finden Java Basics - Anfänger-Themen 5
R Best Practice Palindrom in einem Text finden Java Basics - Anfänger-Themen 18
M Kleinsten Index in Array finden Java Basics - Anfänger-Themen 6
S Objekt finden und benutzen Java Basics - Anfänger-Themen 3
C Lottospiel kann Fehler nicht finden Java Java Basics - Anfänger-Themen 6
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
D Werte in eckige Klammern finden Java Basics - Anfänger-Themen 3
S Input/Output Buchstaben in Eingabe finden und ausgeben Java Basics - Anfänger-Themen 5
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
N Objekt in einer Liste finden? Java Basics - Anfänger-Themen 3
C Finden und verändern Java Basics - Anfänger-Themen 1
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Max finden und umtauschen Java Basics - Anfänger-Themen 2
K String in String-Array finden Java Basics - Anfänger-Themen 7
S Baumstruktur: tiefsten Knoten finden Java Basics - Anfänger-Themen 3
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Zahl in einem String finden Java Basics - Anfänger-Themen 4
C Methoden Diagonalen am best. Punkt im zweidimensionales array finden Java Basics - Anfänger-Themen 3
A Compiler-Fehler Kann Fehler nicht finden Java Basics - Anfänger-Themen 2
R Fehler finden die 2. Java Basics - Anfänger-Themen 7
N Bug finden im Programm Java Basics - Anfänger-Themen 13
P letzte Datei finden Java Basics - Anfänger-Themen 18
M Zwei gleiche Eintraege in ArrayList finden Java Basics - Anfänger-Themen 15
J Inhalt in einem Text-File finden und in ein Array schreiben Java Basics - Anfänger-Themen 5
I String in .txt finden Java Basics - Anfänger-Themen 9
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Methoden Kann Fehler nicht finden Java Basics - Anfänger-Themen 6
M Letztes Element im Array finden Java Basics - Anfänger-Themen 3
R Erste Schritte Minimum und Maximum in Array finden Java Basics - Anfänger-Themen 29
H Schnell HTML-Tags finden Java Basics - Anfänger-Themen 5
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
S brauche hilfe beim fehler finden Java Basics - Anfänger-Themen 2
B Dokumentation in der jre-Library finden Java Basics - Anfänger-Themen 9
T Datentypen Knoten Großvater finden? Java Basics - Anfänger-Themen 12
A Fehler finden und Ausgabe Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben