Große Daten ins Vector füllen

Status
Nicht offen für weitere Antworten.

Iron Monkey

Bekanntes Mitglied
Hi an alle!

Ich als Client bekomme vom Server ein Datenpaket mit einer Größe von 136.213 bytes zurück und fülle die einzelnen Daten vom Datenpaket ins Vector hinzu. Bei dieser Größe des Datenpaketes entspricht ungefähr 543 Zeilen x 43 Spalten für die JTable. Ich gebe ja nach dem Füllen des Vector auch der JTable weiter, um die Daten in der Tabelle anzuzeigen.

Das Problem ist nur, dass das Füllen des Vectors ziemlich lange dauert. Der Grund liegt daran, dass ich im ganzen Datenpaket bestimmte Größe per For-Schleife ausschneide und damit nochmal per For-Schleife (pro Zeile) dann ins Vector füllen, z.B.:

Unter der Lupe im Datenpaket:

Für die 1. Zeile
Die ersten 4 bytes --> Nummer[4] ---> Ins Vector setValueAt( 0, ... )
Die zweiten 20 bytes --> Name[20] ---> Ins Vector setValueAt( 0, ... )
Die dritten 20 bytes --> Vorname[20] ---> Ins Vector setValueAt( 0, ... )
Die vierten 30 bytes --> Strasse[30] ---> Ins Vector setValueAt( 0, ... )
usw.......

Für die 2. Zeile
Die ersten 4 bytes nach der Gesamtlänge der 1. Zeile --> Nummer[4] ---> Ins Vector setValueAt( 1, ... )
Die zweiten 20 bytes nach der Gesamtlänge der 1. Zeile --> Name[20] ---> Ins Vector setValueAt( 1, ... )
Die dritten 20 bytes nach der Gesamtlänge der 1. Zeile --> Vorname[20] ---> Ins Vector setValueAt( 1, ... )
Die vierten 30 bytes nach der Gesamtlänge der 1. Zeile --> Strasse[30] ---> Ins Vector setValueAt( 1, ... )
usw.......


Gibt es eine andere Möglichkeit, das Füllen schneller bearbeiten zu können?

Gruß
Iron Monkey
 

tfa

Top Contributor
Wie groß ist die Anfangskapazität des Vectors? Wahrscheinlich wird der Vector zig mal umkopiert, wenn er über die momentane Größe hinaus wachsen muss. Wenn du die (ungefähre) End-Größe kennst, solltest du sie schon im Konstruktor angeben.
Alternativ kannst du auch eine ArrayList oder LinkedList nehmen, Vector ist eigentlich veraltet und hässlich.
 

Iron Monkey

Bekanntes Mitglied
Hi tfa!

Alternativ kannst du auch eine ArrayList oder LinkedList nehmen, Vector ist eigentlich veraltet und hässlich.

Also, ich habe eine Klasse, die von AbstractTableModel abgeleitet wird, mit Vector aufgebaut und du meinst, in der Klasse mit ArrayList oder LinkedList geht das viel schneller?

Finanzbuchhaltung_Listen.java
Code:
public class Finanzbuchhaltung_Listen extends AbstractTableModel implements Column {

	private static final long serialVersionUID = 1L;
	
	public Vector m_FinanzbuchhaltungVector;
	
	public String strColumnName = "";
	
	public Finanzbuchhaltung_Listen() {
		m_FinanzbuchhaltungVector = new Vector();
	}
	
	//Liefert die Breite der Tabelle ( Breite = Alle Spalten )
	public int getColumnCount() {
		return m_columnsFinanzbuchhaltung.length;
	}

	//Liefert die Anzahl der Elemente in der Liste
	public int getRowCount() {
		return m_FinanzbuchhaltungVector == null ? 0 : m_FinanzbuchhaltungVector.size();
	}
	
	public int getColumn( int c ) 
	{
		return m_columnsFinanzbuchhaltung[c].m_width;
	}
	
	public String getColumnName( int c ) 
	{
		return m_columnsFinanzbuchhaltung[c].m_title;
	}
	
	public void setColumnName( String name ) {
		this.strColumnName = name;
	}
	
	public Class getColumnClass(int c) {
		return m_columnsFinanzbuchhaltung[c].m_class;
    }
	
	public boolean isCellEditable(int nRow, int nCol ) 
	{
		return false;
	}
	
	//Liefert einen Wert für die Zelle bei ColIndex und RowIndex
	public Object getValueAt(int nRow, int nCol) {
		
		if( nRow < 0 || nRow > getRowCount() )
			return null;

		Finanzbuchhaltung_ListenData row = (Finanzbuchhaltung_ListenData) m_FinanzbuchhaltungVector.elementAt(nRow);

		switch( nCol ) {
			case COL_FINANZ_POS:
				try {
					return new Integer( row.m_Position );
				} 
				catch (NumberFormatException e) 
				{
					return new Integer( 0 );
				}
			case COL_FINANZ_KONTONR:
				try {
					return new Integer( row.m_KontoNr );
				} 
				catch (NumberFormatException e) 
				{
					return new Integer( 0 );
				}

                        usw. bis zu 42. Spalten
		}

		return null;
	}
	
	//Setzt einen Wert in eine Zelle.
	public void setValueAt( Object value, int nRow, int nCol ) {
				
		if( nRow < 0 || nRow > getRowCount() ) {
			return;
		}
		
		Finanzbuchhaltung_ListenData row = new Finanzbuchhaltung_ListenData();
		
		try {
			row = ( Finanzbuchhaltung_ListenData ) m_FinanzbuchhaltungVector.elementAt( nRow );
		}
		catch( Exception e ) {
			System.out.println( e.getMessage() );
		}
		
		String svalue = null;
		
		try 
		{
			svalue = ( value.equals( null ) ) ? "" : value.toString();
		} 
		catch (Exception e1) {
			System.out.print( e1.getMessage() );
		}

	        // Insgesamt 42 Spalten 
		switch ( nCol ) {
			case COL_FINANZ_POS:
				try {
					row.m_Position = new Integer( svalue ).intValue();
				} catch (NumberFormatException e) {}
				break;
			case COL_FINANZ_KONTONR:
				if( !svalue .equals("") )
				{
					try {
						row.m_KontoNr = new Integer( svalue ).intValue();
					} catch (NumberFormatException e) {}
				}
				else row.m_KontoNr = 0;
				break;

                        usw. bis zu 42. Spalten
		}
	}
	
	//Elemente in das Vektor einfügen
	public void insert( int nRow ) {
		
		if( nRow < 0 ) {
			nRow = 0;
		}
			
		if( nRow > m_FinanzbuchhaltungVector.size() )
			nRow = m_FinanzbuchhaltungVector.size();
			
		m_FinanzbuchhaltungVector.insertElementAt( new Finanzbuchhaltung_ListenData(), nRow );
	}

	// Einzelne Elemente im Vector löschen
	public boolean delete( int nRow ) {
		
		if( nRow < 0 || nRow >= m_FinanzbuchhaltungVector.size() )
			return false;
		
		m_FinanzbuchhaltungVector.remove( nRow );
		
		return true;
		
	}
		
	// Alle Elemente im Vector löschen
	public boolean deleteAll() {
		m_FinanzbuchhaltungVector.clear();
		return true;
	}

}

Finanzbuchhaltung_ListenData.java

Code:
public class Finanzbuchhaltung_ListenData {

	public int m_Position;
	public int m_KontoNr;
	public String m_RechNr;
	public int m_Vertrag;
	public String m_Belegdatum;
	public float m_Mwst;
	public String m_Betrag;
	public String m_SBetrag;
	public String m_Gegenkonto;
	public int m_Auszifferung;
	public String m_Buchungstext;
	public String m_Art;
	public String m_Abrechnungsart;
	public int m_Buchungsjahr;
	public int m_Artnummer;
	public int m_JournalNr;
	public String m_NSL;
	public int m_EP00;
	public int m_EP01;
	public int m_EP02;
	public int m_EP03;
	public int m_EP04;
	public int m_EP05;
	public int m_EP06;
	public String m_Inkasso;
	public String m_AbrDatVon;
	public String m_AbrDatBis;
	public String m_Kostenuebernahme;
	public String m_Passwort;
	public String m_CallNr;
	public String m_Prioritaet;
	public String m_RechnMerker;
	public String m_SollHaben;
	public String m_NAbgeschlossen;
	public String m_DatumSich;
	public String m_BetrSich;
	public String m_knz;
	public String m_Anzeigen;
	public String m_Saldo;
	public String m_BetrSichK;
	public String m_CrtSich;
	public String m_LeGr;
	public String m_RowDelete;
	
	public Finanzbuchhaltung_ListenData() 
	{
		m_Position 			= 0;
		m_KontoNr 			= 0;
		m_RechNr 			= "";
		m_Vertrag			= 0;
		m_Belegdatum 		= "";
		m_Mwst 				= 0.0f;
		m_Betrag 			= "";
		m_SBetrag			= "";
		m_Gegenkonto 		= "";
		m_Auszifferung		= 0;
		m_Buchungstext		= "";
		m_Art				= "";
		m_Abrechnungsart	= "";
		m_Buchungsjahr		= 0;
		m_Artnummer			= 0;
		m_JournalNr			= 0;
		m_NSL				= "";
		m_EP00				= 0;
		m_EP01				= 0;
		m_EP02				= 0;
		m_EP03				= 0;
		m_EP04				= 0;
		m_EP05				= 0;
		m_EP06				= 0;
		m_Inkasso			= "";
		m_AbrDatVon			= "";
		m_AbrDatBis			= "";
		m_Kostenuebernahme	= "";
		m_Passwort			= "";
		m_CallNr			= "";
		m_Prioritaet		= "";
		m_RechnMerker		= "";
		m_SollHaben			= "";
		m_NAbgeschlossen	= "";
		m_DatumSich			= "";
		m_BetrSich			= "";
		m_knz				= "";
		m_Anzeigen			= "";
		m_Saldo				= "";
		m_BetrSichK			= "";
		m_CrtSich			= "";
		m_LeGr				= "";
		m_RowDelete 		= "";
	}

	public Finanzbuchhaltung_ListenData( 
			int position, int kontonr, int vertrag, String rechnr, String belegdatum, String sollhaben, 
			String betrag, float mwst, String gegenkonto, int journalnr, String buchungstext, int buchungsjahr, 
			int auszifferung, String abrechnungsart, String nabgeschlossen, String nsl, String art, int ep00, 
			int ep01, int ep02, int ep03, int ep04, int ep05, int ep06, String inkasso, String callnr, 
			String abrdatvon, String abrdatbis, String passwort, String kostenuebernahme, String sbetrag, 
			int artnummer, String prioritaet, String rechnmerker, String datumsich, String betrbich, 
			String knz, String anzeigen, String saldo, String betrbichk, String crtsich, 
			String legr, String rowDelete )
	{
		m_Position 			= position;
		m_KontoNr 			= kontonr;
		m_RechNr 			= rechnr;
		m_Vertrag			= vertrag;
		m_Belegdatum 		= belegdatum;
		m_Mwst 				= mwst;
		m_Betrag 			= betrag;
		m_SBetrag			= sbetrag;
		m_Gegenkonto 		= gegenkonto;
		m_Auszifferung		= auszifferung;
		m_Buchungstext		= buchungstext;
		m_Art				= art;
		m_Abrechnungsart	= abrechnungsart;
		m_Buchungsjahr		= buchungsjahr;
		m_Artnummer			= artnummer;
		m_JournalNr			= journalnr;
		m_NSL				= nsl;
		m_EP00				= ep00;
		m_EP01				= ep01;
		m_EP02				= ep02;
		m_EP03				= ep03;
		m_EP04				= ep04;
		m_EP05				= ep05;
		m_EP06				= ep06;
		m_Inkasso			= inkasso;
		m_AbrDatVon			= abrdatvon;
		m_AbrDatBis			= abrdatbis;
		m_Kostenuebernahme	= kostenuebernahme;
		m_Passwort			= passwort;
		m_CallNr			= callnr;
		m_Prioritaet		= prioritaet;
		m_RechnMerker		= rechnmerker;
		m_SollHaben			= sollhaben;
		m_NAbgeschlossen	= nabgeschlossen;
		m_DatumSich			= datumsich;
		m_BetrSich			= betrbich;
		m_knz				= knz;
		m_Anzeigen			= anzeigen;
		m_Saldo				= saldo;
		m_BetrSichK			= betrbichk;
		m_CrtSich			= crtsich;
		m_LeGr				= legr;
		m_RowDelete 		= rowDelete;
	}

}
 

tfa

Top Contributor
Iron Monkey hat gesagt.:
Hi tfa!

Alternativ kannst du auch eine ArrayList oder LinkedList nehmen, Vector ist eigentlich veraltet und hässlich.

Also, ich habe eine Klasse, die von AbstractTableModel abgeleitet wird, mit Vector aufgebaut und du meinst, in der Klasse mit ArrayList oder LinkedList geht das viel schneller?
Nein, das habe ich nicht behauptet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
staxx6 Mehr/ kleine oder Weniger/ große Pakete? Netzwerkprogrammierung 8
G Alternative Rückgabe große ArrayList Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S Daten über TCP/IP senden Netzwerkprogrammierung 3
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Spezielle Daten aus Website entnehmen Netzwerkprogrammierung 5
H Daten auf einer Webseite eintragen Netzwerkprogrammierung 11
A Socket Daten in Textdokument speichern? Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
S Fakturierungsprogramm - Daten aktuell halten (blutiger Anfänger) Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
K Server liest Daten nicht Netzwerkprogrammierung 6
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
R Daten von Cloud laden Netzwerkprogrammierung 5
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
P Socket Best Practice: Daten bündeln Netzwerkprogrammierung 5
E Verfügbarkeit von Daten in Streams Netzwerkprogrammierung 4
F Daten aus Internetseiten auslesen Netzwerkprogrammierung 56
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
A versch. Daten im Stream erkennen Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
F UDP Daten kommen nicht an Netzwerkprogrammierung 22
E Socket OutputSream abbruch.Wegen zuviel !empfangener! Daten? Netzwerkprogrammierung 10
C Client zu Client Daten übertragen Netzwerkprogrammierung 13
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Socket XML-Daten und Parameter an Server schicken Netzwerkprogrammierung 3
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
T RMI Effizenteste Übertragung von Daten Netzwerkprogrammierung 6
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
Kr0e Versenden von Daten übers Netzwerk Netzwerkprogrammierung 30
E Daten kommen anders an als gesendert ?! Netzwerkprogrammierung 6
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
F POST-Daten sende Netzwerkprogrammierung 3
E HTTPS Debuggen (verschlüsselte Daten anzeigen)? Netzwerkprogrammierung 12
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
M Ethernet Daten abfangen Netzwerkprogrammierung 13
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
S Daten per GET-Methode Netzwerkprogrammierung 2
H Server soll Daten schicken, aber wie? Netzwerkprogrammierung 47
M Socket schließt bevor Daten komplett geladen Netzwerkprogrammierung 5
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
M Daten übers Netz verschlüsselt übertragen? Wie? Netzwerkprogrammierung 18
J Post-Daten an URL schicken Netzwerkprogrammierung 2
U Image erzeugen aus empfangenen Daten Netzwerkprogrammierung 7
A Wie werden Daten versendet? "Crashcode" Netzwerkprogrammierung 4
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
T Daten über GSM verschicken Netzwerkprogrammierung 4
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
M Verliere Daten mit WinXP Netzwerkprogrammierung 10
O eingehende Daten speichern Netzwerkprogrammierung 3
D UDP-Daten anzeigen Netzwerkprogrammierung 2
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
G Vector aktualisiert sich nicht? Netzwerkprogrammierung 6
I Vector in Datagram packen Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben