Text in zweidimensionalem Array ablegen

So, hab die API zu ArrayList nun überflogen und nicht wirklich was gefunden.
Wie ich mich in einem normalen eindimensionalen Array bewege weis ich, mein Problem bei ArrayList, bzw allgemein, ist dass ich mich in der x-richtung, also innerhalb einer Zeile bewegen muss.
Das einzige was ich in der API gefunden habe, ist die get Methode, nur die hiflft mir wenig, da ich nicht rausgefunden hab, wie ich diese anwende.


Gruß Alex
 
Hallo.
Anstelle einer ArrayList kannst du dich ja auch mal mit anderen dynamischen Datenstrukturen befassen wie der Queue. Sie ist leicht verständlich und man kann sie leicht, auf seine eigenen Bedürfnisse zugeschnitten, implementieren.
Bei Interesse poste ich noch eine Bsp. Queue.

MFG
Joe
 
Werd mich heute abend mal hinsetzen und eine Queue programmieren. Hab auf dem rechner nur nen Stack der dir wohl icht sonderlich weiterhelfen kann.

MFG
Joe
 
Ausprobieren tuts auch. Man muss nicht unbedingt die API lesen und verstehen.

Wenn du aus Zeile 1 Element Nummer 5 haben willst machste einfach:
Java:
String element15 = linesS.get(0)[4];
 
Nun hab ich folgendes Problem mit ArrayList:
ich lese 2 Dateien mit einer Gesammtgroesse von ca. 7 MB in ein ArrayList ein und bekomme da folgende Fehlermeldung:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2760)
	at java.util.Arrays.copyOf(Arrays.java:2734)
	at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
	at java.util.ArrayList.add(ArrayList.java:351)
	at java.util.regex.Pattern.split(Pattern.java:1000)
	at java.lang.String.split(String.java:2293)
	at java.lang.String.split(String.java:2335)
	at src.MQL2DBC.ArraytoArraylist(MQL2DBC.java:2116)
	at src.MQL2DBC.jButton4MouseClicked(MQL2DBC.java:1067)
	at src.MQL2DBC$11.mouseClicked(MQL2DBC.java:553)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
	at java.awt.Component.processMouseEvent(Component.java:6041)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
	at java.awt.Component.processEvent(Component.java:5803)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2429)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Wie es aussieht, bin ich an Grenzen der ArrayList gestossen, kann mich evtl. jemand aufklären wo die Grenzen sind und ob es eine Möglichkeit gibt diese zu umgehen, denn die Dateien sollen auch noch grösser werden..

So übergebe ich die Dateien an die Klasse:
Code:
ArrayList<String[]> mqls_ArL	= ArraytoArraylist(tmps);
ArrayList<String[]> mqle_ArL	= ArraytoArraylist(tmpe);


Und so sieht die Klasse aus:

Code:
public static ArrayList<String[]> ArraytoArraylist(String File){
String[] mqlline 	= null;
ArrayList<String[]> lines = new ArrayList<String[]>();

try {
	BufferedReader br = new BufferedReader (new FileReader  (File));
	String zeile="";
	while ((zeile=br.readLine()) !=null) {
		mqlline = zeile.split("\\|") ;
		lines.add(mqlline);
	}

} 
catch (FileNotFoundException e) {
	e.printStackTrace();
} 
catch (IOException e) {
	e.printStackTrace();
} 

return lines;
}


Gruß Alex
 
Hallo,

du hast nicht die Grenze der ArrayList erreicht. Es ist lediglich der Speicher der JVM voll. Den kannst du manuell erhöhen.

Schau mal hier
http://www.tutorials.de/forum/java/264743-speicher-der-java-vm-erhoehen.html


Aber wenn du sagst, dass die Dateien nur etwa 7 MB groß sind(was nicht wirklich groß ist), hast du irgendwo in deinem Programm noch einen hohen Speicherbedarf, wahrscheinlich durch Objecte die immer noch im Speicher sind und bleiben, obwohl sie nicht mehr gebraucht werden. Aber das ist lediglich eine Vermutung.
Der obere Link müsste dir aber helfen.

MFG

zEriX
 
Als erstes vielen Dank für den Tip.
Wie kann ich denn rausbekommen ob, bzw. welche Objekte solchen Speicherbedarf verursachen?
Die Speicherauslastung geht bei meinem Programm wenn ich ArrayList nutze bis zu 90 MB und dann schmiert es mit der genannten Fehlermeldung ab.

Wenn ich die Arraylist weglasse, ist die Speicherauslastung so bei ca. 50 MB.


Gruß Alex
 
Zurück