Die letzten 10 Beiträge |
Batista |
Super erklärt, ich implementiere es noch einmal, falls ich Probleme bekomme, melde ich mich wieder
|
eulerscheZahl |
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
public Object next() {
Object x = array [position];
for ( int i = position; i<array.length-1; i++){
array [i]= array[i+1];
}
belegt -= 1;
return x;
} |
|
Hier löschst du Einträge aus der Liste, ein Iterator darf die Liste nicht verändern.
Und das hasNext() lässt sich auch einfacher schreiben.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
/** Zum naechsten Element gehen */
public Object next() {
return array[position++];
}
/** Test, ob die Liste ein naechstes Element hat */
public boolean hasNext() {
return position < belegt;
} |
|
Bei remove(0) werden die übrigen Einträge alle um 1 nach oben geschoben, das heißt du musst jeden Wert im Array überschreiben. Das geht nicht in konstanter Laufzeit, sondern hängt von der Anzahl der Einträge ab (genau wie prepend). Ein append geht dagegen in konstanter Zeit, wenn die Liste nicht vergrößert werden muss. |
Batista |
Das ist soweit die Angabe
directupload.net/file/d/3981/4pjtm7i8_jpg.htm
directupload.net/file/d/3981/rqrg56wd_jpg.htm
Erkennst du an der Aufgabenstellung, wie man machen sollte?
Zitat: |
Original von eulerscheZahl
Ansonsten musst du eben ObjectArray als Iterable deklarieren. |
deklarieren bedeutet:
Die Klasse ObjectArray implements iterable<Object> ?
remove(0) hat die Komplexität O(1) ? |
eulerscheZahl |
Darfst du denn einfach in der main aus ObjectArray ObjectArrayPlus machen? Falls ja, geht das so in Ordnung. Ansonsten musst du eben ObjectArray als Iterable deklarieren. |
Batista |
Sehr verständlich
@eulerscheZahl
könntest du dir bitte den letzten Code anschauen? Hat man damit die Aufgabe gelöst, wie erwünscht? |
Karlito |
Hallo,
in der Softwaretechnologie gibt es etwas, das nennt sich Design Pattern (oder auch Entwurfsmuster). Das sind bewährte Muster, welche man immer wieder verwendet.
Der Iterator ist ein solches Entwurfsmuster. Der Vorteil von Iterator ist, dass völlig egal ist, welche Datenstruktur im Hintergrund verwendet wird. Solange das Iterator-Pattern implementiert ist, kann man die Datenstruktur Element für Element durchsuchen. In java wird dadurch die erweiterte for-Schleife (foreach) möglich. Diese verwendet implizit den Iterator.
Was die foreach-Schleife angeht:
code: |
1:
2:
3:
4:
5:
|
for(Foo foo : foos) {
System.out.println(foo);
}
|
|
ist äquivalent zu:
code: |
1:
2:
3:
4:
5:
6:
|
Iterator it = foos.getIterator()
while(it.hasNext()){
System.out.println(it.next());
}
|
|
.
Damit man die foreach-Schleife verwenden kann, muss die Datenstruktur, über die iteriert werden soll Iterable (ein Interface) implementieren. Damit ist dann die Methode getIterator() verfügbar. Diese gibt dann ein Objekt vom Typ Iterator zurück (auch ein Interface). Dieses Objekt realisiert dann den Schrittweisen zugriff per .hasNext() und next() auf die Datenstruktur. Wie die Struktur dabei aussieht (Baum, Hashset, LinkedList, Array, ....) ist völlig egal.
Gruß,
Karlito |
Polzi |
Würde mich auch mal interessieren... danke für die Antwort schon mal! |
Batista |
Wieso wird überhaupt Iterator verwendet? Welche Funktion erfüllt es? |
Batista |
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
public static void main(String[] args) {
ObjectArrayPlus liste = new ObjectArrayPlus(10);
liste.prepend(2);
liste.prepend(1);
liste.append(3);
liste.append(4);
liste.prepend(0);
System.out.println("Ist die Laenge 5? "+liste.size());
System.out.println("Die naechstes Zeile sollte dies sein: '0 1 2 3 4'!");
for (Object i : liste) {
System.out.print(i+" ");
}
System.out.println();
liste.remove(2);
System.out.println("Die naechstes Zeile sollte dies sein: '0 1 3 4'!");
for (Object i : liste) {
System.out.print(i+" ");
}
System.out.println();
}
}
|
|
Ich versteh foreach nicht, wird
foreach nur beutz wenn Iteratorwird? |
Batista |
Perfekt
Ich benutze foreach nur wenn lesend wichtig ist.
Darf man auch for statt foreach benutzen, oder besteht hier die Gefahr, dass an versehentlich ein Objekt/Liste verändert. |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |
|
|