Großes Hash-Set erzeugen

RungetSvohu

Bekanntes Mitglied
Hallo Leute,

ich muss zu Programmstart eine große Menge an Strings in ein HashSet<String> laden, über 1.000.000. Derzeit habe ich die Strings alle in einer txt-Datei gespeichert, jede Zeile einen. Dann lese ich sie über
Java:
eader = new RandomAccessFile(file, "r");
zeilenweise ein. Der ganze Vorgang dauert mehrere Minuten. Kann man das irgendwie beschleunigen, indem ich die Daten anders abspeichere und anders einlese?

Vielen Dank!
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Obwohl RandomAccessFile ja glaub ich super schnell ist, wo liegt der Sinn darin wenn du eh sequentiell die Datei einmal durchläufst?
 
H

hüteüberhüte

Gast
Kann auch sein, dass die HashMap mit einem zu kleinen Wert instantiiert wird, und die Map immer vergrößert und reorganisiert werden muss..
 

RungetSvohu

Bekanntes Mitglied
Ich lese so ein:

Java:
reader = new RandomAccessFile(file, "r");
String line;
while ((line = reader.readLine()) != null) {
strings.add(line);

Ich glaube aber, dass die meiste Zeit nicht beim Einlesen verloren geht, sondern beim Einfügen in die HashSet, da muss er ja jedes Mal überprüfen, ob was doppelt ist oder nicht.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ich glaube aber, dass die meiste Zeit nicht beim Einlesen verloren geht, sondern beim Einfügen in die HashSet
Das kannst du durch ein paar Sysouts doch sehr genau feststellen.

Das einfügen von 2 Millionen (unterschiedlichen) Strings in ein Set dauert bei mir jedenfalls nur knapp 4 Sekunden.
 

Joew0815

Bekanntes Mitglied
Versuchs mal über:
[JAvA]
BufferedReader br = null;
try
{
FileReader fr = null;
try
{
fr = new FileReader("....");
br = new BufferedReader(fr);
String line;

while((line = br.readLine()) != null)
{
?.add(line)
}
}
finally
{
if(fr != null)
{
fr.close();
}
}
}
finally
{
if(br != null)
{
br.close();
}
}
[/code]

Alternativ würde ich mal eine Liste verwenden / einfach nur aus der Datei lesen
(nur zum Test was da so lange dauert)
 
F

Firephoenix

Gast
Versuchs mal über:
[JAvA]
BufferedReader br = null;
try
{
FileReader fr = null;
try
{
fr = new FileReader("....");
br = new BufferedReader(fr);
String line;

while((line = br.readLine()) != null)
{
?.add(line)
}
}
finally
{
if(fr != null)
{
fr.close();
}
}
}
finally
{
if(br != null)
{
br.close();
}
}
[/code]

Alternativ würde ich mal eine Liste verwenden / einfach nur aus der Datei lesen
(nur zum Test was da so lange dauert)

Das ist im Prinzip normales einlesen, mit dem Zusatz das das doppelte schließen der verschachtelten Reader sinnlos sein dürfte, close von BufferedReader sieht nämlich so aus:
Java:
public void close() throws IOException {
	synchronized (lock) {
	    if (in == null)
		return;
	    in.close();
	    in = null;
	    cb = null;
	}
    }

Der innere Stream wird also sowieso geschlossen, es reicht den äußeren zu schließen.
Gruß
 

RungetSvohu

Bekanntes Mitglied
Versuchs mal über:
[JAvA]
BufferedReader br = null;
try
{
FileReader fr = null;
try
{
fr = new FileReader("....");
br = new BufferedReader(fr);
String line;

while((line = br.readLine()) != null)
{
?.add(line)
}
}
finally
{
if(fr != null)
{
fr.close();
}
}
}
finally
{
if(br != null)
{
br.close();
}
}
[/code]

Alternativ würde ich mal eine Liste verwenden / einfach nur aus der Datei lesen
(nur zum Test was da so lange dauert)


Vielen Dank, habe erst einmal einfach die Zeile
Java:
strings.add(line);
auskommentiert und Zeit gestoppt. Mit der Zeile dauerte es 68802 ms, ohne 68050 ms. Meine Vermutung war also falsch und das Problem lag eindeutig beim Einlesen der Datei. Mit dem BufferedReader + FileReader dauert die ganze Sache nun 465 ms ohne
Java:
strings.add(line);
und 1550 ms mit der Zeile. Damit bin ich auf jeden Fall zufrieden. Vielen Dank!
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
Seikuassi Input/Output ZipOutputStream erzeugt zu großes .zip-Archiv Allgemeine Java-Themen 3
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
B Großes Projekt "gut" schreiben Allgemeine Java-Themen 22
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
V aus mehreren jar files, ein großes basteln Allgemeine Java-Themen 22
T Datenstruktur für großes Netz Allgemeine Java-Themen 2
G Großes Programm - Wie Strukturieren? Allgemeine Java-Themen 19
A Großes Problem mit dem Lesen großer Datenmengen Allgemeine Java-Themen 16
E Hash Size (Sha 256) Allgemeine Java-Themen 5
Kirby.exe Hash Map Allgemeine Java-Themen 24
L Hash-Tabelle Allgemeine Java-Themen 2
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
W Passwort Clientseitig sicher ablegen ohne Hash Allgemeine Java-Themen 2
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
J Hash aus Verzeichniss generieren Allgemeine Java-Themen 2
S Hash-Bereiche erstellen die gleichverteilt sind..? Allgemeine Java-Themen 8
J MD5-Hash einer Datei Allgemeine Java-Themen 4
O Hash Wert von Passwörter erstellen (SHA) Allgemeine Java-Themen 9
F Passwort hash Allgemeine Java-Themen 8
M@rk MD5 Hash Allgemeine Java-Themen 3
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
H Hash Tabelle einlesen und die Werte an ein Array übergeben Allgemeine Java-Themen 10
M Hash Tables Allgemeine Java-Themen 5
I hash-algorithmus Allgemeine Java-Themen 9
Zrebna Aus einer jar-Datei eine exe-Datei erzeugen lassen Allgemeine Java-Themen 37
W Aggregierter JaCoCo.exec erzeugen Allgemeine Java-Themen 0
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
S Klickbare Stacktraces selber erzeugen..? Allgemeine Java-Themen 9
I OpenPDF (ehem. iText) will kein PDF mit CMYK only erzeugen Allgemeine Java-Themen 6
J Runable jar erzeugen Allgemeine Java-Themen 2
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
temi Valides Dreieck erzeugen Allgemeine Java-Themen 6
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
dereki2000 Windows Benachrichtigung erzeugen Allgemeine Java-Themen 2
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
F Objekte erzeugen Allgemeine Java-Themen 1
M Variabe a[i] erzeugen Allgemeine Java-Themen 8
Meeresgott Kapselung Tabellen der Datenbank erzeugen. Allgemeine Java-Themen 7
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
L ICS-Kalenderdatei aus PDF erzeugen Allgemeine Java-Themen 0
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
F Java Spintax: Alle Kombinationen Erzeugen Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
H Vektor rekursiv erzeugen Allgemeine Java-Themen 2
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
V 2D-Grafik BufferdImage aus gif Datei in Jar erzeugen geht nicht. Allgemeine Java-Themen 6
R Aus Eclipse Projekt ein UML erzeugen Allgemeine Java-Themen 3
G Texte erzeugen Allgemeine Java-Themen 3
P Excel-Sheets erzeugen aus Report Allgemeine Java-Themen 2
Ollek Barcode mit Barcode4J erzeugen - Exception Allgemeine Java-Themen 4
P Arrays erzeugen Allgemeine Java-Themen 5
G Strings erzeugen Allgemeine Java-Themen 20
C QR-Codes erzeugen. Allgemeine Java-Themen 43
M Input/Output Datei erzeugen funktioniert nicht (immer) vom .jar aus Allgemeine Java-Themen 5
T "Platzsparende" und "schnelle" Indizes erzeugen Allgemeine Java-Themen 10
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
D 2D-Grafik Funktionierende .jar datei mit Images (jpg) erzeugen Allgemeine Java-Themen 2
S Schnell eine fortlaufende nummer erzeugen SQL, kein Primkey Allgemeine Java-Themen 8
M Graphen erzeugen und visualisieren, jgraph oder was was anderes? Allgemeine Java-Themen 2
M Klassen Zugriff auf getMethode ohne Klasse zu erzeugen Allgemeine Java-Themen 6
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
Y Eclipse ppt Folie erzeugen + text plazieren Allgemeine Java-Themen 4
G log4j File erzeugen und Pfad bestimmen Allgemeine Java-Themen 3
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
A HashCode von DatagrammPacket(content) erzeugen. Allgemeine Java-Themen 3
A auführbare Jar erzeugen mit ant Allgemeine Java-Themen 5
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
Developer_X Java ton erzeugen Allgemeine Java-Themen 3
D character kodierung, barcode für barcode font erzeugen Allgemeine Java-Themen 4
D Worddocumente erzeugen Allgemeine Java-Themen 4
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
S JUnit: Erzeugen einer IOException Allgemeine Java-Themen 9
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
A AES Key aus Text erzeugen Allgemeine Java-Themen 2
G JFrame Icon selbst erzeugen Allgemeine Java-Themen 2
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
F Klasse vorhanden - wie daraus Objekt erzeugen Allgemeine Java-Themen 8
C PDF erzeugen Allgemeine Java-Themen 3
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
F Zufallszahl erzeugen Allgemeine Java-Themen 4
P Objekt einer Klasse erzeugen, die als String vorliegt Allgemeine Java-Themen 3
multiholle Objekt einer Klasse anhand eines String erzeugen Allgemeine Java-Themen 3
M odt-Datei erzeugen Allgemeine Java-Themen 6
G File zur Laufzeit erzeugen Allgemeine Java-Themen 4
G Windows Pipe erzeugen Allgemeine Java-Themen 12
A Wie eine Seriennummer erzeugen und auswerten? Allgemeine Java-Themen 11
G erzeugen von "ArrayList<Integer>[][]" Allgemeine Java-Themen 7
T Log4J: Bei Programmstart immer eine neue LogDatei erzeugen Allgemeine Java-Themen 9
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
A Objekt in einem Array erzeugen Allgemeine Java-Themen 6
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
V Enums aus Datei-Einträgen erzeugen? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben