Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Liste » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Batista

Super erklärt, ich implementiere es noch einmal, falls ich Probleme bekomme, melde ich mich wieder smile
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 Daumen hoch

@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 Daumen hoch

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.