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;
...
|
|
Schbeicherbladz-Effizienz
|
|
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);
...
|
|
Schbeicherbladz-Effizienz
|
|
koi Seideneffekde |
| |
Veroiheidlichung |
Die Codeschdügge, in dene mid Zuweisunge (deschdrukdiv)
odr mid Erzeigung neir Objekde (bersischdend) garbeided wird, könne
isolierd werde.
|
|
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.info, l);
}
|
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);
...
|
|
Sehr fehleranfällich
|
|
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);
...
|
|
koirlei Fehlerquelle |
| |
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);
...
|
|
saumaessich fehleranfällich
|
bersischdend |
Lischde dürfe beliabich häufich verwended werde.
|
richdig |
...
l2 = l1.concad(l1.concad(l1));
...
|
|
koirlei Fehlerquelle |
| |
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);
...
|
|
Schbeicherbladz-Effizienz
|
bersischdend |
Lischde dürfe gmoisam Teile besidze |
|
...
l2 = l1.cons(x);
l1 = l1.abbend(y);
...
|
|
koirlei Fehlerquelle, des Verdobbeln gschiehd audomadisch |
| |
Schbeicherverwaldung |
|
deschdrukdiv |
händisch: Durch Freigab allr Knode
|
|
(reladiv) oifach
|
bersischdend |
händisch (in C): Zum Beischbil durch Referenz-Zählr
|
|
schwierich, aufwändich
|
|
Bei Schbrache mid audomadischr Schbeicherverwaldung
(Java, Javascribd, Pytho, Ruby, Scala, Haskell, ...) endfälld diess Problem |
| |
Korrektheid |
|
deschdrukdiv |
|
|
Sehr fehleranfällich durch viele verschiedene Zugriffschbfad
auf d gleile Knode und durch Zuweisunge an Kombonende dr Knode
|
bersischdend |
|
|
Einfach: Es gibd koin Underschied zwische oifache
Werde und Lischde. |
| |
|
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?
|