@Engel der Furcht: Analog zum ObjectOutputStream gibt es auch einen ObjectInputStream.![]()
@Engel der Furcht: Analog zum ObjectOutputStream gibt es auch einen ObjectInputStream.![]()
--
Ich bin eine Säbelzahnkatze *miau*
Ich frage mich immer wieder, was du mit den Arrays hast.
Da der Name contactList schon verrät, dass es eine dynamisch wachsende Liste ist, wäre es auch angebracht die Liste auch als Liste zu behandeln und die Daten stattdessen in eine ArrayList zu packen![]()
Vielleicht wurden Listen noch gar nicht im Unterricht durchgenommen?
@ Engel der Furcht:
Ich würde dir auch wie Whiz-zarD empfehlen auf eine ArrayList umzusteigen, dann musst du dir keine Sorge wegen Größe, etc. machen. Außerdem stehen dir auch zusätzlich nützliche Methoden bereit, die die "Verwaltung" der Liste leichter machen. Falls du aber häufig Einfüge- oder Löschoperationen durchführst, würde ich zu einer LinkedList zurückgreifen, die sind nämlich performanter als ArrayLists.
Und genau das hasse ich am Informatikunterricht an Schulen, wenn die Lehrer keine Kompetenz aufweisen, dann sollen sie es gleich lassen. Den Schülern das Programmieren falsch beibringen kann nicht das Ziel der Übung sein.
Arrays verwendet man nur, wenn man zur Laufzeit exakt die Anzahl der Elemente kennt, und die Anzahl sich auch nicht mehr ändert. Eine Veränderung der Arraygröße ist immer sehr problematisch, da ein Array als ganzer Block im Speicher liegt. Bei einer Vergrößerung muss ein neues Array erzeugt, und das alte in das neue kopiert werden, was bei vielen Änderungen sehr inperformant wird. Es macht also kein Sinn, eine Adressverwaltung mittels eines Array zu implementieren, da man eben die Anzahl der Adressen nicht kennt, die gespeichert werden sollen. Nutzer A hat vielleicht nur 3 Adressen, aber Nutzer B möchte 30.000 Adressen speichern.
Ich schätze auch mal, dass die zweite Dimension des 2D-Arrays wohl die Daten des Kontaktes bereithält. Schon in den Anfängen der Informatik hat man erkannt, dass dies sehr bescheiden ist, und hat dafür ein Record/eine Struktur entwickelt, die die Daten ansprechender machen. In der objektorientierten Welt wäre dies einfach nur eine Klasse, die lediglich nur Getter- und Setter-Methoden für die Klassenvariablen bereitstellen. In der objektorientierten Welt nennt man sowas auch Geschäftsobjekt.
Dann hätte man anstatt String[][] ein LinkedList<Contact>. Und wer ganz schlau ist, kapselt LinkedList<Contact> in eine Klasse:
Dies wäre dann eine Liste von Geschäftsobjekten. Der Vorteil bei diesen Objekten ist nun, dass ich jeweils für die Kontakte, als auch für die Kontaktliste eigene Logik-Methoden implementieren kann, wie z.B. das Laden oder Speichern, und ContactList ist ansprechender als LinkedList<Contact>, weil es mich nun nicht mehr interessiert, wie die Kontaktliste implementiert ist. Sie ist einfach da und ich benutze sie.
ArrayList<ArrayList<ArrayList<String>>>
Eine Drei-Dimensionale Liste mit Strings
Du kannst es auch beliebig weiterführen. hab doch keine Angst, damit zu experimentieren. Es gibt doch im Internet genug Tutorials, die Listen erklären.
Geändert von Whiz-zarD (03.05.2013 um 23:22 Uhr)
In diesem Fall würde ich gleich anstatt der ArrayList zu einer LinkedList greifen, da bei einer Löschung eines Elements in einer ArrayList die ganze hintere Liste um eine Position nach vorne gerückt werden muss. Und in deinem Fall mit den 30.000 Adressen ist das sicher nicht zu vernachlässigen.
EDIT: Oh, hab gerade gesehen, dass du eh eine LinkedList verwendest. ^^
Geändert von Rusk (03.05.2013 um 23:45 Uhr)
Vielen Dank für eure Hilfe :>
Hab da noch ne Frage (ich fühl mich so n00by hier)
Ich hab eine Klasse. In dieser Klasse wird ein Objekt einer anderen Klasse erzeugt.
Jetzt wird in diesem Objekt eine Methode aufgerufen und diese Methode soll aber in eine TextArea aus der ersten Klasse (also der Objekt-Erzeuger-Klasse) schreiben.
Geht das irgendwie? :>
Ja.
Würde ich aber nicht machen, da dies gegen das Model-View-Controller-Prinzip verstößt.
Zeige doch mal konkret, was du vor hast.
Geändert von Whiz-zarD (07.05.2013 um 19:30 Uhr)
Woah, mein Lehrer hat sogar mal davon gefaselt
Er meinte, dass das für uns zu kompliziert sei, die einzelnen Dinge zu trennen.
So kompliziert ist das gar nicht. Gerade in Sprachen, wie Java oder C# ist das recht einfach einzuhalten. In Sprachen, wie php sieht es schon wieder ein wenig anders aus, ist aber auch möglich.
Sag also konkret, was du vor hast, und ich könnte dir da auch weiterhelfen.
Direkt nach TextArea würde ich nicht schreiben, dann wäre die Instanz eines erzeugten Objektes abhängig von deiner Frame-Instanz, und genau das will das Model-View-Controller-Prinzip verhindern.
Klassen, die die Daten bereitstellen, sollen unabhängig von Klassen sein, die die Anzeige bereitstellen. Angenommen, du erzeugst eine Tabelle und willst sie sowohl in Tabellenform, als auch als Diagramm darstellen. Es wäre dann sehr unklug, wenn die Klasse, die die Tabelle (= Model) erzeugt, abhängig von der jeweiligen View ist.
Schreib die Methode so, dass sie dir die Informationen liefert, die du benötigst und gib diese Daten als Rückgabewert zurück.
Dann kannst du mit Hilfe dieser Daten den String zusammenbauen (in deiner Frame-Instanz), der in der TextArea angezeigt werden soll.