LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ?

Hallo 🙂

ich arbeite grad mit Listen, genauer gesagt zweidimensionalen Listen. Die haben auch ziemlich viele Elemente. Zum Füllen der Listen (mittels .add) benutze ich LinkedList<LinkedList<String>>, da dies schneller sein soll als mit ArrayList.

Zum Abrufen/Editieren ist ja nun aber eine ArrayList schneller/besser, da die LinkedList bei .get alle vorherigen Elemente durchgehen muss, da sie nur die Nachbarelemente "kennt".

Deshalb würde ich gern beide Listentypen benutzen, um von beiden die Vorteile zu nutzen und Nachteile zu umgehen. Nur die Konvertierung steht mir im Weg 😀

Gibt es denn eigentlich noch eine andere Art, wie ich die Elemente einer Liste alle durchlaufen kann und gleichzeitig editieren kann?
Wenn ich
Java:
for (String item : ListeMitString> {
    if (item == "bla") {
        item = "blubb"
    }
}

benutze, funktioniert es ja nicht. Deshalb benutze ich zur Zeit eine "einfache" for-Schleife mit Zählvariable.

So viele Fragen, vielleicht hat ja jemand ein paar Tipps für mich 🙂

mfg Hans
 
> da dies schneller sein soll als mit ArrayList.
allein deinen Forum-Post zu formulieren kostet mehr Zeit, als du vielleicht im Leben mit LinkedList statt ArrayList einsparst,
wenn überhaupt etwas zu sparen ist..,
willst du nicht lieber gleich komplett auf ArrayList setzen?

ansonsten new ArrayList(andere Liste), bei Verschachtelung musst du in der Tat per Schleife die einzelnen Elemente austauschen,
die inneren ArrayList statt LinkedList ganz analog zu deiner zweiten Frage mit dem String

zu jener ist einerseits deine for-i-Schleife korrekt, als Tipp kann man ansonsten nur vorschlagen,
nicht String bzw. sonst ein zu ersetzendes Objekt X direkt einzufügen, sondern einen Container,
ein Objekt Y welches X enthält, dann kann Y gleichbleiben, X in Y ausgetauscht werden

der Aufwand kann freilich beträchtlich sein,
StringBuilder wäre ein Container, der auch beim Zusammenbau hilft,
List<List<String>>, worum es eh schon geht, auch hierzu denkbar, falls die innere Liste immer nur einen String enthält,
gegebenenfalls noch ne Stufe weiter List<List<List<String>>> 😉
 
Zuletzt bearbeitet von einem Moderator:
Hmm, dann hab ich das wohl überinterpretiert. Dann werd ich wohl alles auf ArrayList setzen.

Bleibt noch der Punkt 2 und deinem Tipp: den versteh ich nicht 😛
Am praktischsten wäre es eben, wenn ich mit der for-Schleife (also ohne Zählvariable) nur eine Referenz/einen Pointer auf das Element bekommen könnte und keine lokale Kopie.
 
> nur eine Referenz/einen Pointer auf das Element bekommen könnte und keine lokale Kopie.

du bekommst schon das Originalobjekt, davon keine Kopie, um es der Wichtigkeit wegen nochmal zu betonen,

aber die Referenz ist eine eigenständige Variable, quasi eine Kopie der Referenz innerhalb der Liste, ja,
und dazu gibt es in Java keine Alternative, nein, weder bei Methodenaufrufen, noch bei Listendurchlauf, noch irgendwo

du hast keinen Zugriff auf die Referenz im internen Aufbau der Liste, darum geht es ja,
du musst schon set-Methoden usw. bemühen,

oder wie gesagt Indirektion selber bauen:
lasse die lokale Referenz + unabhängig davon die Referenz intern in der Liste unverändert auf ein Objekt Y verweisen,
diesen Wrapper darfs du aber inhaltlich verändern,
wenn dort ein neues X ersetzt wird, wirkt sich das auf die Liste genauso aus, denn die verlinkt ja auch auf Y
 
Zuletzt bearbeitet von einem Moderator:
Das mit der Geschwindigkeit würde ich so pauschal nicht sagen... Je nachdem, welche Operationen man durchführt, kann da schon ein deutlicher Geschwindigkeitsunterschied sein. Dass man aus diesem Grund Listen in verschiedene Typen konvertiert ist... etwas suspekt (auch wenn in der Collections-API selbst noch VIEEEL schlimmere Dinge gemacht werden 😉 ) und man sollte es vermeiden, wenn man nicht wirklich einen eindeutigen Bottleneck identifiziert hat, und die Konvertierung einen echten Vorteil bringt.

Dewegen: Was willst du modellieren? Was für Operationen wilslt du darauf ausführen? Was ist wirklich das langsame daran? (Ohne Spekulation ~"Ich habe mal gehört X sei langsamer als Y" 😉 ). Der Struktur nach ("2D-Liste") klingt das, als könnte man da auch ganz andere Ansätze verwenden...
 
Eigentlich will ich "nur" aus mehreren txt-Dateien eine Excel-Datei erstellen (Apache POI HSSF). Also habe ich für jedes Sheet dann eine 2d-Liste, also eine Matrix. In den einzelnen Zellen sind aber "Formatierungsschlüssel" eingebaut, z.B. "bla-<f003>" da muss "-<f003>" abgeschnitten werden und die Zelle/Zeile in der Farbe 3 eingefärbt werden. Deshalb muss ich über jede Zelle iterieren bzw. diese auslesen/prüfen und aber gleichzeitig verändern können.

Also eigentlich keine große Algorithmenzauberei, jedoch können es ganz schön viele Daten werden, aber eben nur Strings. Die xls-Dateien am Ende sind zwischen 10 und 20 MB groß.
 
Sowas wie
Java:
interface Sheet {
    int getNumRows();
    int getNumColumns();
    void set(int r, int c, String value);
    String get(int r, int c);
}
könnte man in betracht ziehen... Das kann man implementieren, wie man will ... anhand der bisherigen Beschreibung würde da auch nichts gegen einen 2D-Array sprechen :bahnhof:
 
Naja die ArrayList nutze ich, da ich vorher nicht weiß, wieviele Zeilen die txt hat. Gibt es denn zwischen ArrayList und Array überhaupt nennenswerte Unterschiede, da hinter der ArrayList ja doch auch nur ein Array steckt?
 

Neue Themen


Zurück
Oben