Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
veryvarious
Anmeldungsdatum: 12.07.2006 Beiträge: 6
|
Verfasst am: 13. Jul 2006 10:24 Titel: String[][] Einträge verlängern |
|
|
Hallo,
ich habe einen 2-dimensionalen Array "list = new String[2][] " und schreibe die Werte aus zwei anderen Array so hinein.
list[0] = String[] x;
list[1] = String[] y;
Jetzt würde ich gerne falls sich String[] x ändert diese Änderungen wieder in list[0] schreiben bzw. anhängen ohne die bereits darin stehenden Werte zu überschreiben.
Weiss jemand einen adäquaten Lösungsweg? |
|
Nach oben |
|
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 13. Jul 2006 14:04 Titel: |
|
|
Verstehe ich nicht. |
|
Nach oben |
|
|
veryvarious
Anmeldungsdatum: 12.07.2006 Beiträge: 6
|
Verfasst am: 13. Jul 2006 14:33 Titel: |
|
|
Hatte ich es vielleicht schlecht erklärt?
Dies ist mein Funktion!
public listTX(String[] lista,String[] listb) {
this.lists = new String[2][];
lists[0] = lista;
ists[1] = listb;
}
Wenn ich jetzt diese Funktion ein zweites mal aufrufen würde, würden meine Wert in list[0] bzw. list[1] mit den neuen Werten von lista bzw. listb überschrieben werden.
Ich wüsste gerne ob es eine Möglichkeit gibt das die neue lista bzw. listb an die Werte list[0] bzw. list[1] angehängt werden.
Ich hoffe Du verstehst was ich meine! |
|
Nach oben |
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 13. Jul 2006 14:58 Titel: |
|
|
Achso.
Die eine Möglichkeit ist, ein neues Array für lista zu erstellen, was die größe der alten + der neuen Liste hat. Dann kannst du die Werte alle in das neue Array rüberschreiben.
Für dynamisch erweiterbare Listen sind allerdings verlinkte Listen sinnvoller. Eine Implementation bietet z.B. ArrayList. |
|
Nach oben |
|
|
veryvarious
Anmeldungsdatum: 12.07.2006 Beiträge: 6
|
Verfasst am: 14. Jul 2006 07:53 Titel: |
|
|
Ja so hab ich mir das auch irgendwie gedacht, aber leider bekomme ich es nicht hin, hast Du vielleicht einen Link zu einem Beispielcode?
Bis dahin werde ich weiter herum experimentieren! |
|
Nach oben |
|
|
Senior Sanchez
Anmeldungsdatum: 19.06.2006 Beiträge: 9
|
Verfasst am: 14. Jul 2006 20:59 Titel: |
|
|
Tobias hat Folgendes geschrieben: | Achso.
Die eine Möglichkeit ist, ein neues Array für lista zu erstellen, was die größe der alten + der neuen Liste hat. Dann kannst du die Werte alle in das neue Array rüberschreiben.
Für dynamisch erweiterbare Listen sind allerdings verlinkte Listen sinnvoller. Eine Implementation bietet z.B. ArrayList. |
Da war jetzt natürlich nen kleiner Fehler drin
ArrayList ist ne List-Implementierung, aber keine verlinkte Liste, sondern eine Liste die die Elemente in Arrays speichert Daher ja auch der Name.
Was du vllt mehr meinst ist die LinkedList, das ist eine verkettete Liste.
Effizienter für simples anhängen ist natürlich die LinkedList, da sie das quasi in konstanter Zeit erledigt, während die ArrayList der Komplexitätsklasse n zuzuordnen wäre, da ja erstmal Speicher fürs neue Array allokiert werden muss und danach jedes Objekt ins neue Array kopiert werden muss
Dafür bieten ArrayLists aber schnelleren Zugriff auf jedes Element und zwar in konstanter Zeit, egal welches Element gefragt ist, da man ja über den Index leicht das Objekt finden kann. LinkedList erledigt das im Mittel in n/2 er Zeit, aber ist natürlich ein linearer Algorithmus von Nöten.
Aber wie es Tobias sagte, sind Listen der Erfolg.
public void listTx(String[] lista, String[] listb) {
list_one.addAll(Arrays.asList(lista));
list_two.addAll(Arrays.asList(listb));
}
Das wars schon Sofern ich dich richtig verstanden habe.
list_one bzw. list_two implementierst du dann als Instanz-Variable innerhalb der Klasse am besten so:
private List<String> list_one = new LinkedList<String>();
private List<String> list_two = new LinkedList<String>();
So, da haben wir jetzt auch noch nen richtig schönen Stil mitreingebracht
Die Methode setzt instanzierte list_one und list_two Objekte voraus, ansonsten hagelt es ne NullPointerException. Diese ruft jetzt einfach die addAll Methode auf, die eine Collection an das Ende der Liste hängt. Collections sind Klassen die das Interface Collection Implementieren, wie zum Beispiel listen. Um nun aus den übergebenen Arrays eine List zu bekommen wird die statische Methode asList aufgerufen die ein Objekt-Array (oder wie bei Java 5 var args) in eine List-Darstellung überführt.
Diese Liste wird dann an unsere gewünschte Liste gehangen.
Zur Instanziierung der Listen noch: Meine Implementierung hier setzt Java 5 voraus, da Generics verwendet werden die ein get aus der Liste erleichtern und absichern, da wir nicht mehr auf String casten müssen. Vorher gibts das allerdings nicht.
Was man aber unbedingt machen sollte ist gegen List zu programmieren und nicht gegen z.B. LinkedList. Durch die Verwendung des List-Interfaces können wir die Implementierung ganz leicht austauschen, aus einer LinkedList kann so ganz schnell ein Vector oder eine ArrayList werden indem wir nur eine einzige Zeile ändern müssen! Würden wir dagegen direkt gegen LinkedList programmieren könnte es sein dass wir LinkedList-spezifische Methoden verwenden die aber ArrayList nicht kennen würde. |
|
Nach oben |
|
|
veryvarious
Anmeldungsdatum: 12.07.2006 Beiträge: 6
|
Verfasst am: 18. Jul 2006 11:34 Titel: |
|
|
Okay super ich jetzt haut es hin vielen Dank! |
|
Nach oben |
|
|
|