Grundkonzepte java.util.List Interface List (1)

Werbung
Grundkonzepte java.util.List
• Eine List ist eine Spezialisierung einer allgemeinen
Ansammlung (Collection):
– Lineare Ordnung ist definiert
– Zugriff über Rang oder Position
– Volle Kontrolle wo eingefügt bzw. gelöscht wird.
• Eine Liste kann Elemente mehrfach enthalten (insbes.
null-Elemente).
• Zugriffsoperationen können je nach Implementierung
teuer sein. Wenn immer möglich soll die Liste mittels
einem Iterator abgearbeitet werden.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-13
Interface List (1)
public interface List extends Collection {
// Zugriff und Suche
Object get(int index);
int
indexOf(Object o);
int
lastIndexOf(Object o);
// Veränderung
Object set(int index, Object element);
void
add(Object element);
void
add(int index, Object element);
Object remove(Object element);
Object remove(int index);
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
//Opt.
//Opt.
//Opt.
//Opt.
//Opt.
4-14
Interface List (2)
// Iterator
ListIterator listIterator();
ListIterator listIterator(int index);
// Bereich
List subList(int from, int to);
}
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-15
Konzept ListIterator (1)
• Ein ListIterator unterstützt das Abarbeiten einer Folge
in der gewünschten Reihenfolge (vorwärts bzw. rückwärts).
• Traversieren einer Liste in Vorwärtsrichtung ist mittels
next() und hasNext()möglich.
o
ListIterator it=l.listIterator();
while(it.hasNext()) {
Object o = it.next();
//Objekt o verarbeiten }
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-16
Konzept ListIterator (2)
• previous() und hasPrevious() analog für rückwärts.
• set(Object o) ersetzt Element, das als letztes
besucht wurde.
• remove() entfernt Element, das als letztes besucht
wurde.
o
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-17
Konzept ListIterator (3)
a
b
• add(Object o) fügt Element an der gegenwärtigen
Iteratorposition ein d.h. vor dem Element, das next()
bzw. hinter dem Element, das prev() liefern würde.
a
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
b
4-18
Interface ListIterator
public interface ListIterator extends Iterator {
boolean hasNext();
Object next();
boolean hasPrevious();
Object previous();
int
int
nextIndex();
previousIndex();
void
void
void
remove();
set(Object o);
add(Object o);
// Optional
// Optional
// Optional
}
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-19
Klasse ArrayList
public class ArrayList
extends AbstractList
implements List, ...
• Implementierung mittels Felder, die in der Grösse
anwachsen können.
• Grosse Ähnlichkeit mit Vector().
• Hauptunterschied zu Vector(): Keine Synchronisation,
ArrayList() effizienter bei sequentiellen Programmen
• Veränderung bei gleichzeitigem Lesen erkannt (fail-safe).
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-20
Klasse LinkedList
public class LinkedList
extends AbstractSequentialList
implements List, ...
• Implementierung mittels doppelt verketteter
Listen.
• Direktzugriffsoperationen zu vermeiden.
• Ebenfalls „fail-safe“.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-21
Collection und Verwandte
Das Collection Rahmenwerk besteht aus einer
Reihe von hierarchisch aufgebauten Schnittstellen.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-22
Interface Collection (1)
public interface Collection {
int
size();
boolean isEmpty();
boolean contains(Object element);
boolean add(Object element);
//Optional
boolean remove(Object element); //Optional
Iterator iterator();
boolean
boolean
boolean
boolean
void
Departement Informatik
Universität Basel
containsAll(Collection c);
addAll(Collection c);
//Optional
removeAll(Collection c);//Optional
retainAll(Collection c);//Optional
clear();
//Optional
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-23
Interface Collection (2)
Object[] toArray();
Object[] toArray(Object a[]);
}
Per Konvention sollen alle konkreten Implementierungen
einen Konstruktor mit dem Argument Collection
haben, der aus einem beliebigen Collection-Typ ein neues
Objekt erzeugt.
Vorteil: Konversionen zwischen allen Typen möglich.
List l = new ArrayList(c);
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-24
Klasse AbstractCollection
public abstract class AbstractCollection
implements Collection
Diese Klasse ist eine Skelettimplementierung des
Collection-Interface. Für die Realisierung einer
nichtveränderbaren Collection-Klasse muss nur size()
und iterator() implementiert werden.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-25
Klasse AbstractList
public abstract class AbstractList
extends AbstractCollection
implements List
• Geeignet für Listen mit Direktzugriff.
• listIterator bereits vorhanden.
• Für die Realisierung einer nichtveränderbaren Liste muss
nur get(int index) und size() implementiert
werden.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-26
Klasse AbstractSequentialList
public abstract class
AbstractSequentialList
extends AbstractList
• Geeignet für Listen mit sequentiellem Zugriff.
• get(int index),... bereits vorhanden.
• Für die Realisierung einer nichtveränderbaren Liste müssen
nur noch Methoden des listIterators implementiert werden.
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-27
Interface Iterator
public interface Iterator {
boolean hasNext();
Object next();
void
remove();
// Optional
}
Typische Anwendung: Einzelne Elemente nacheinander besuchen
Iterator it=c.iterator();
while(it.hasNext()) {
Object o = it.next();
//Objekt o verarbeiten
}
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-28
Klasse Collections
Die Klasse Collections in java.util besteht aus einer
Sammlung von statischen Methoden, mit denen Listen und
andere Datenstrukturen des Collection Rahmenwerks
bearbeitet werden können. Es gibt 2 unterschiedliche
Anwendungsbereiche:
• Methoden zur algorithmischen Unterstützung:
– min, max, search
– shuffle, sort
• Definition von Sichten / Wrapper:
– synchronized...
– unmodifiable...
Departement Informatik
Universität Basel
Algorithmen und Datenstrukturen
Folgen und Java Collections
4-29
Herunterladen