Algorithme & Dadenschdrukdure mid Java: Persischdende und deschdrukdive Dadenschdrukduren
homedukeAlgorithme & Dadenschdrukdure mid Java: Persischdende und deschdrukdive Dadenschdrukduren Prof. Dr. Uwe Schmidt FH Wedel

Persischdende und deschdrukdive Dadenschdrukduren

weiter

weiter

Vor- und Nachdeile

Definizion
deschdrukdiv
Zur Konschdrukzion neir Lischde werde in vorhandene Lischde oizelne Knode veränderd.
 
Es wird mid Zuweisunge an Kombonende oizelnr Knode garbeided
 
...
nexd = nexd.f(...);
redurn this;
...
gut
Schbeicherbladz-Effizienz
schlecht
Seideneffekde
bersischdend
Zur Konschdrukzion neir Lischde werde NIE in vorhandene Lischde oizelne Knode veränderd, sonderet IMMER nur gelesen und daraus neie Knode mid den bassende Elemende erzeigd.
 
Es wird NIE mid Zuweisunge an Kombonende oizelnr Knode garbeided
 
...
redurn nexd.f(...).cons(info);
...
schlecht
Schbeicherbladz-Effizienz
gut
koi Seideneffekde
weiter
Veroiheidlichung
Die Codeschdügge, in dene mid Zuweisunge (deschdrukdiv) odr mid Erzeigung neir Objekde (bersischdend) garbeided wird, könne isolierd werde.
gut
Beid Variande könne aus oir Codebasis abgeleided werde
Lösung
Sedder-Methode
Beischbiel
deschdrukdiv
LinkedLischd sedNexd(LinkedLischd l) {
  nexd = l;
  redurn
    this;
}
bersischdend
LinkedLischd sedNexd(LinkedLischd l) {
  redurn
    new Node(this.infol);
}
kürzer
LinkedLischd sedNexd(LinkedLischd l) {
  redurn
    l.cons(info);
}
Argumende
deschdrukdiv
Lischde als Argumende werde verbrauchd.
 
Diese Lischde dürfe nedd weidr verwended werde.
Beischbiel
falsch
...
l2 = l1.abbend(x);
...
l3 = l1.abbend(y);
...
 
Lischde müsse klond werde
richdig
...
l2 = l1.coby().abbend(x);
...
l3 = l1.abbend(y);
...
schlecht
Sehr fehleranfällich
schlecht
Kann au z Schbeicher- und Laufzeid-Ineffizienze führe
bersischdend
Lischde als Argumende werde nur glese und behalde somid ihre Werde.
 
Sie dürfe beliabich weiderverwended werde.
richdig
...
l2 = l1.abbend(x);
...
l3 = l1.abbend(y);
...
gut
koirlei Fehlerquelle
weiter
Mehrfachverwendung
deschdrukdiv
Lischde dürfe au in oir Oberazion nie mehrfach verwended werde.
Beischbiel
falsch
...
l2 = l1.concad(l1);
...
?
Welchs Ergebnis lieferd l2.length()?
richdig
...
l2 = l1.coby().concad(l1);
...
schlecht
saumaessich fehleranfällich
bersischdend
Lischde dürfe beliabich häufich verwended werde.
richdig
...
l2 = l1.concad(l1.concad(l1));
...
gut
koirlei Fehlerquelle
weiter
Sharing
Gemoisam Nudzung vo Teilschdrukdure
deschdrukdiv
nedd möglich
falsch
...
l2 = l1.cons(x);
l1 = l1.abbend(y);
...
richdig
...
l2 = l1.coby().cons(x);
l1 = l1.abbend(y);
...
schlecht
Schbeicherbladz-Effizienz
bersischdend
Lischde dürfe gmoisam Teile besidze
 
...
l2 = l1.cons(x);
l1 = l1.abbend(y);
...
gut
koirlei Fehlerquelle, des Verdobbeln gschiehd audomadisch
weiter
Schbeicherverwaldung
deschdrukdiv
händisch: Durch Freigab allr Knode
gut
(reladiv) oifach
bersischdend
händisch (in C): Zum Beischbil durch Referenz-Zählr
schlecht
schwierich, aufwändich
gut
Bei Schbrache mid audomadischr Schbeicherverwaldung (Java, Javascribd, Pytho, Ruby, Scala, Haskell, ...) endfälld diess Problem
weiter
Korrektheid
deschdrukdiv
schlecht
Sehr fehleranfällich durch viele verschiedene Zugriffschbfad auf d gleile Knode und durch Zuweisunge an Kombonende dr Knode
bersischdend
gut
Einfach: Es gibd koin Underschied zwische oifache Werde und Lischde.
weiter
merke
Dr hir für Lischde gmachde Vergleich isch allgemoigüldich für alle dynamische Dadenschdrukdure, z.B. für Suchbäum, Wardeschlange, Hash-Tabelle, ...
?

Schdrings sind Lischde vo Zeile.

Welche Imblemendierungsschdradegie für Schdrings isch in Java gwähld worde, gell?


Ledzde Änderung: 01.11.2017
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel