Collection vs. LinkedList, Abstrakt vs. Konkret

Status
Nicht offen für weitere Antworten.

chaosbringer

Mitglied
Hallo,
gibt es eine Daumenregel o.ä., welchen Typen ich für meine Referenzen benutze?

Zum Beispiel benutze ich in meiner Klasse eine LinkedList, sollte die Referenz dann auch vom Typen LinkedList sein, oder sollte man lieber einen abstrakteren Typen nehmen, also z.B. List und den Rest der späten Bindung überlassen.

Gibt es da eine Empfehlung?

Danke.
 

byte

Top Contributor
Als Referenztyp immer das Interface nehmen (List, Set, Map, ...). Der konkrete Objekttyp variiert dann je nach Einsatzgebiet (siehe Pros/Cons der einzelnen Implementierungen in der Javadoc).
 

chaosbringer

Mitglied
Hi,
dass hatte ich bisher auch so gehandhabt. Das Problem ist nur, dass ich z.B. auf das erste element meiner List zugreifen möchte, und da wäre zum Beispiel getFirst() von LinkedList deutlisch besser, als get(0) von List.
Die Frage ist, was nun?
Caste ich einfach vor dem Aufruf von getFirst(), oder deklariere ich die Liste von Vornherein als LinkedList?

MfG,
chaosbringer
 
S

SlaterB

Gast
Cast ist Quatsch, wenn du dein Programm davon abhängig machst, dass LinkedList drinsteht,
dann muss auch die Variable LinkedList sein, alles andere wäre Verschleierung,

er stellt sich nur die Frage, ob du wirklich getFirst() brauchst
 

chaosbringer

Mitglied
Mhm, naja, ich muss leider auch auf as letzte Element der Liste zugreifen, und da bringt ein getLast() schon deutlich mehr Performance als ein get( list.size()-1 );
Mhm, irgendwie blöd. Bin mit beiden Lösungen nicht glücklich. ArrayList geht leider auch nicht, weil ich viele add's in bestimmte Listenpositionen mache, und das wohl auch zuviel Laufzeit kosten würde.

MfG,
chaosbringer
 
Zuletzt bearbeitet:
M

maki

Gast
Dann brauchst du wohl ganz konkret LinkedList :)

Die regel für die Interfaces anstatt Implementierungen funktioniert natürlich nur, wenn die interfaces alles gewünschte zur Verfügung stellen.
 
S

SlaterB

Gast
Notlösung wäre evtl. noch

List l = new LinkedList();
l.add("a");
l.add("b");
System.out.println(l.listIterator(l.size()).previous());
l = new ArrayList();
l.add("a");
l.add("b");
System.out.println(l.listIterator(l.size()).previous());

bei LinkedList wird bei hohem Index rückwärts gelaufen (wieso nicht auch bei get()?..)

aber schön kann man das auch nicht nennen ;)

edit: halt, bei get() passiert das auch, get( list.size()-1 ); sollte dann auch schnell gehen,
hat wohl mal wieder niemand ausprobiert ;)
oder meinst du wirklich, dass das immer noch zu langsam ist?
wenn von Position 0 aus alle Elemente durchlaufen werden müssten, könnte ich das ja verstehen
 
Zuletzt bearbeitet von einem Moderator:

Illuvatar

Top Contributor
Sourcecode von LinkedList:
[HIGHLIGHT="Java"]
public E get(int index) {
return entry(index).element;
}
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) { // Anmerkung: (size >> 1) ist (size / 2) (sollte sowas der Compiler nicht automatisch optimieren?)
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
public E getFirst() {
if (size==0)
throw new NoSuchElementException();

return header.next.element;
}
[/HIGHLIGHT]

get( list.size()-1 ) ist also im Endeffekt gleichschnell wie getFirst - ok, es gibt vielleicht einen minimalsten Unterschied aber darauf kommt es wirklich nicht an.

Edit: Args, es geht natürlich um getLast :autsch: Aber das ist ja exakt das gleiche, nur mit header.previous
 
Zuletzt bearbeitet:

chaosbringer

Mitglied
Also, um es zusammenfassen:
Sowohl getLast() als auch get( list.size()-1 ) habe für LinkedList konstante Laufzeit?

Mfg,
chaosbringer
 

0x7F800000

Top Contributor
Bei der LinkedList: ja.
Bei einer allgemeinen Liste muss das nicht möglich sein, jemand kann ja auch eine enfachverkettete übergeben, dann wirds extrem lahm.

Wenn du eigentlich nur eine List ausgeben willst, aber deine methode beispielsweise rekursiv ist, und intern mit LinkedLists arbeiten will, dann könntest du die rekursiv aufgerufene methode private machen, und nach außen einen wrapper der methode bereitstellen, der lediglich Rückgabe einer allgemeinen List garantiert, und die rekursive variante startet. Das mag sich seltsam anhören, aber so versprichst du nicht zu viel, und am Interface ändert sich nichts, wenn du dich später doch noch für eine Implementierung mit ArrayList entscheidest.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
J LinkedList, Collection, ArrayList, List. was denn bitte? Java Basics - Anfänger-Themen 6
Encera Garbage Collection Java Basics - Anfänger-Themen 9
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
N Collections Werte aus .txt in einer Collection speichern Java Basics - Anfänger-Themen 11
M Collection Aufgabe Java Basics - Anfänger-Themen 22
Arif Collections Unkonstruiertes Objekt einer Collection hinzufügen Java Basics - Anfänger-Themen 2
W Collection-Problem Java Basics - Anfänger-Themen 35
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
N Collection sortieren/ filtern Java Basics - Anfänger-Themen 7
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
J Objekt in Collection speichern Java Basics - Anfänger-Themen 4
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
J Collection Objekt Java Basics - Anfänger-Themen 3
T Collections Zusammengehörende Strings in einer Collection Java Basics - Anfänger-Themen 2
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
K Collections Collection für 12 mio Strings Java Basics - Anfänger-Themen 7
Y Collection der eigenen Klasse Java Basics - Anfänger-Themen 10
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
G Collections Wahl der richtigen Collection Java Basics - Anfänger-Themen 11
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
D Scala Iterable zu Java Collection konvertieren Java Basics - Anfänger-Themen 3
D Frage zu Collection und deren Anwendung Java Basics - Anfänger-Themen 2
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
J Collection soll übergeben werden... Java Basics - Anfänger-Themen 7
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
B Iterator und Collection Java Basics - Anfänger-Themen 11
G Java Collection Frameworks Java Basics - Anfänger-Themen 5
D Collection Konvertieren Java Basics - Anfänger-Themen 7
K Datentypen Über Collection iterieren bringt fehler Java Basics - Anfänger-Themen 8
K OOP Aus Collection Objekte bestimmter Subklassen entfernen Java Basics - Anfänger-Themen 7
S Welche Collection? Java Basics - Anfänger-Themen 5
S Collection rückwärts durchsuchen Java Basics - Anfänger-Themen 4
W Wie kann ich auf Object meiner Collection zugreifen Java Basics - Anfänger-Themen 7
J Collection Vector Java Basics - Anfänger-Themen 8
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
T Collection in collection Java Basics - Anfänger-Themen 6
T Collection von Objekten verschiedener Klassen Java Basics - Anfänger-Themen 4
J Collection ArrayList und mit erweitertem for iterieren Java Basics - Anfänger-Themen 7
J Probleme mit Collection ArrayList Java Basics - Anfänger-Themen 2
G Collection<BufImg> in Datei speichern Java Basics - Anfänger-Themen 8
A Collection auslesen ohne Objekttyp zu kennen? Java Basics - Anfänger-Themen 11
G Collection<Strings> - Liste von Strings verwalten Java Basics - Anfänger-Themen 9
A Struts: Über Collection iterieren mir Taglibs? Java Basics - Anfänger-Themen 13
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
I Frage zu Collection und List Interfaces Java Basics - Anfänger-Themen 2
M Object [][] ist nicht vom Typ Collection? Java Basics - Anfänger-Themen 3
S Collection wie LinkedHashMap Java Basics - Anfänger-Themen 7
S Collection Sort Java Basics - Anfänger-Themen 15
A Welche Collection? Java Basics - Anfänger-Themen 13
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
S Collection in einer Collection Java Basics - Anfänger-Themen 5
A Welche Collection soll ich nehmen? Java Basics - Anfänger-Themen 4
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
K Collection und Iterator Java Basics - Anfänger-Themen 7
I Bestimmte Variablen in Collection Classes Java Basics - Anfänger-Themen 2
M Source Code von Collection Framework, etc. Java Basics - Anfänger-Themen 3
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
K Verständnisfrage Collection, ArrayList und Referenzen Java Basics - Anfänger-Themen 4
S Mit Collection<int[]> umgehen Java Basics - Anfänger-Themen 2
S welche collection ? String und object Java Basics - Anfänger-Themen 5
M gibt es eine collection mit definierter maximaler größe Java Basics - Anfänger-Themen 4
G Collection Framework Java Basics - Anfänger-Themen 8
V Mehrdimensionale Collection? Java Basics - Anfänger-Themen 4
U JSTL: Collection auslesen mit forEach Java Basics - Anfänger-Themen 1
A Interface Collection implementieren? Java Basics - Anfänger-Themen 4
I Collection sortieren, ":" höchste "Priorität& Java Basics - Anfänger-Themen 4
P Äquivalent zu Visual Basic Collection Java Basics - Anfänger-Themen 6
G Collection, aber welche? Java Basics - Anfänger-Themen 6
A Collection<String> Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
E Strings in Collection Java Basics - Anfänger-Themen 6
R welche Collection nehmen? Java Basics - Anfänger-Themen 4
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
megachucky Collection Vector: ausgabe klappt nicht richtig Java Basics - Anfänger-Themen 9
T Welche Collection nehmen? HashMap? Java Basics - Anfänger-Themen 4
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
Düsseldorf2002 Datentypen Verschachtelte LinkedList Java Basics - Anfänger-Themen 5
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
G Java LinkedList Java Basics - Anfänger-Themen 6
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
S Mit einer LinkedList vorwärts und rückwärts iterieren Java Basics - Anfänger-Themen 6
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben