Iterator über ArrayList

Status
Nicht offen für weitere Antworten.

pun

Mitglied
Hallo,

Ich habe eine ArrayList<Integer> und einen Iterator<Integer> über dieser Liste.
Wenn ich also einen neue Klasse mit der Liste erstelle, bekomme ich wie erwartet schön meine Integer Zahlen ausgegeben, so wie ich das auch erwartet habe.

Wenn ich aber explizit die next() und hasNext() Methoden des Iterators aufrufe, scheint da irgendwas nicht ganz zu stimmen, mein hasNext() liefter immer true, mein next() lieftert immer den selben (ersten Wert) der ArrayList.

Hier mein Iterator (primeList ist die ArrayList<Integer>):
Java:
public Iterator<Integer> iterator() {

        return new Iterator<Integer>() {

            private int k=0;

            public boolean hasNext() {
                return k<primeList.size();
            }

            public Integer next() {
               return primeList.get(k++);
            }

            public void remove() {
                throw new UnsupportedOperationException("not supported");
            }
        };
    }

Wieso liefert mein next() immer nur den ersten Wert der Liste, obwohl der Iterator scheinbar korrekt funktioniert?
 
T

Tomate_Salat

Gast
woher kommt das primeList?

[EDIT] wer lesen kann ist im vorteil...sry =(
[EDIT2] wie wärs mit noch einer Kontrollabfrage:
Java:
public Integer next() {
                return (hasNext() ) ? primeList.get(k++) : null;
            }

[EDIT3] interessieren würde mich auch, wie du den Iterator anwendest

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:

pun

Mitglied
Ich mach meine neue Klasse,in der eben dieser Iterator als anonyme Klasse definiert ist:

Klasse k = new Klasse();
dann rufe ich
k.iterator().next() auf, und egal wie oft ich das aufrufe, ich erhalte immer die erste Zahl aus der Liste,
k.iterator().hasNext() liefter immer true :/
 
T

Tomate_Salat

Gast
Mir scheint deine Methode:

Java:
public Iterator<Integer> iterator() {
...
}

sehr sinnfrei. Wieso löst du das ganze nicht einfach so:

Java:
ArrayList<Integer> primeList = new ArrayList<Integer>();
...
Iterator<Integer> iterator  = primeList.iterator();

MFG

Tomate_Salat
 

pun

Mitglied
naja, die Methode remove zB. soll überschrieben werden, da diese durch den Iterator nicht unterstützt werden soll.
 
T

Tomate_Salat

Gast
Ich habe jz noch nicht viel (eigentl. noch garnicht) mit Iteratoren gearbeitet.
Habe mich, wegen deinem Post, auch im Internet (openbook: java ist auch eine Insel) umgeschaut und selber ausprobiert. Aber ich wüsste nicht wie du einen bearbeiteten Iterator einem Array zuweist.

Beim schreiben käme mir jetzt die Idee: du könntest evtl. das erreichen indem du ArrayList ein bisschen bearbeitetst.
Werde ich mal versuchen.

Edit

Versuchs mal damit:

Java:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author Thomas S.
 * @version 1.0
 */
public class MyArrayList extends ArrayList<Integer>{

    private static final long serialVersionUID = 1L;
    private static ArrayList<Integer> list     = new ArrayList<Integer>();
    
    
    @Override
    public void add(int index, Integer element) {
        list.add(index, element);
    }
    
    @Override
    public boolean add(Integer e) {
        return list.add(e);
    }
    
    @Override
    public boolean addAll(Collection<? extends Integer> c) {
        return list.addAll(c);
    }
    
    @Override
    public void clear() {
        list.clear();
    }
    
    @Override
    public Object clone() {
        return list.clone();
    }
    
    @Override
    public Integer get(int index) {
        return list.get(index);
    }
    
    @Override
    public Iterator<Integer> iterator() {
        return it();
    }
    
    private Iterator<Integer> it() {
        final ArrayList<Integer> liste = MyArrayList.list;
        
        return new Iterator<Integer>() {
 
            private int k=0;
 
            public boolean hasNext() {
                return k<liste.size();
            }
 
            public Integer next() {
               return (hasNext()) ? liste.get(k++) : null;
            }
 
            public void remove() {
                throw new UnsupportedOperationException("not supported");
            }
        };
    }
}

ich habe jetzt nicht alle Methoden von ArrayList überschrieben, aber ich denke die wichtigsten sind dabei

kannst du dann etwa so verwenden:

Java:
MyArrayList liste   = new MyArrayList();
        liste.add(12);
        Iterator<Integer> it= liste.iterator();
        it.remove(); // Habs getestet, wirft eine Exception

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
Tomate_Salat: du extendest eine Liste und verwendest in ihr nochmal ne Liste? Wieso nimmst du nicht die eigentliche liste? Ist sonst ziemlich Sinnfrei

[highlight=java]
package de.test;

import java.util.ArrayList;
import java.util.Iterator;

public class MyList<E> extends ArrayList<E> {
private static final long serialVersionUID = 6260414736583004822L;

@Override
public Iterator<E> iterator() {
return new Iterator<E>() {

Iterator<E> it = listIterator();

@Override
public boolean hasNext() {
return it.hasNext();
}

@Override
public E next() {
return it.next();
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}

};
}

}

[/highlight]
 

pun

Mitglied
hm also diese Lösung zeigt das gleiche Problem auf....
egal wie oft ich next() aufrufe, ich bekomme immer nur die erste Zahl, aber eben nur wenn ich es explizit aufrufe.
Wenn ich eine foreach Schleife über der iterierten Klasse laufen lasse, geht es..
Kann es sein, dass ich einfach irgendwie dieses next() falsch teste ?
 
G

Gelöschtes Mitglied 5909

Gast
bevor du next aufrufst solltest du immer hasNext aufrufen

[highlight=java]
public static void main( String[] args ) {
List<Integer> list = new MyList<Integer>();
list.addAll(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 }));
Iterator<Integer> it = list.iterator();
while ( it.hasNext() ) {
Integer next = it.next();
System.out.println(next);
}
}
[/highlight]

 
Zuletzt bearbeitet von einem Moderator:

pun

Mitglied
hm okay, dann kann man das nur so in ner schleife laufen lassen,
dachte man könnte einfach mal next() aufrufen und dann springt der Iterator eins weiter.

/e

ok jetzt hab ichs gerafft danke^^
 
Zuletzt bearbeitet:

Civilazi

Bekanntes Mitglied
hm also diese Lösung zeigt das gleiche Problem auf....
egal wie oft ich next() aufrufe, ich bekomme immer nur die erste Zahl, aber eben nur wenn ich es explizit aufrufe.
Wenn ich eine foreach Schleife über der iterierten Klasse laufen lasse, geht es..
Kann es sein, dass ich einfach irgendwie dieses next() falsch teste ?

Wenn du das "explizit" machst, holst du dir doch mit .iterator() jedesmal einen neuen Iterator (siehe deine Methode). Der muss ja dann am Anfang auf das erste Element zeigen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methoden Iterator über ArrayList Java Basics - Anfänger-Themen 3
J Verschachtelte for-Schleife mit Löschen von Iterationen. Wie über Iterator abbilden? Java Basics - Anfänger-Themen 6
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
Stargirlxo Iterator + Methode Java Basics - Anfänger-Themen 10
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Iterator erneut! Java Basics - Anfänger-Themen 8
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
K Iterator zurückliefern Java Basics - Anfänger-Themen 8
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
S Iterator einer Liste Java Basics - Anfänger-Themen 4
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
I Erste Schritte Iterator Java Basics - Anfänger-Themen 3
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
O Interface Iterator Java Basics - Anfänger-Themen 2
M Collections Frage Beispielprogrammierung Iterator Java Basics - Anfänger-Themen 13
M Iterator Java Basics - Anfänger-Themen 25
J Iterator Funktioniert nicht richtig in StackImplementierung Java Basics - Anfänger-Themen 3
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
L Iterator Java Basics - Anfänger-Themen 1
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
OnDemand Iterator Interfacve Java Basics - Anfänger-Themen 23
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
W Iterator Java Basics - Anfänger-Themen 2
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
F Wie Werte einer ArrayList an einen 'Custom'-Iterator übergeben? Java Basics - Anfänger-Themen 2
J Iterator Java Basics - Anfänger-Themen 5
P ArrayList mit Iterator / Iterable ausgeben Java Basics - Anfänger-Themen 8
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
D Wie Iterator Remove implementieren? Java Basics - Anfänger-Themen 11
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
D Iterator schaltet nicht weiter?! Java Basics - Anfänger-Themen 5
A Problem mit Iterator Java Basics - Anfänger-Themen 2
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
V Hilfe beim implementieren von Iterator Java Basics - Anfänger-Themen 5
W Collections Iterator<E> Java Basics - Anfänger-Themen 7
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
W OOP problem mit iterator! -.- Java Basics - Anfänger-Themen 9
B Iterator und Collection Java Basics - Anfänger-Themen 11
ruutaiokwu Iterator oder .size ??? Java Basics - Anfänger-Themen 6
vandread Iterator zählt nicht hoch?! Java Basics - Anfänger-Themen 3
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
M Iterator Java Basics - Anfänger-Themen 15
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
P Iterator.add() Java Basics - Anfänger-Themen 3
A For Schleife - Iterator wird null Java Basics - Anfänger-Themen 7
? Map und iterator Java Basics - Anfänger-Themen 11
0x7F800000 ungereimtheiten mit Iterator/ListIterator Java Basics - Anfänger-Themen 2
N "Dynamischer" Iterator Java Basics - Anfänger-Themen 21
J Iterator remove()? Java Basics - Anfänger-Themen 5
T Liste mit Iterator auslesen Java Basics - Anfänger-Themen 11
Kr0e Iterator Java Basics - Anfänger-Themen 2
D iterator instanziieren! Java Basics - Anfänger-Themen 11
M Der Umgang mit Iterator - Wie ein Objekt aus einer ArrayList Java Basics - Anfänger-Themen 2
J ArrayList mit Iterator Java Basics - Anfänger-Themen 3
W Iterator in Queue Java Basics - Anfänger-Themen 5
A Für was Iterator ? Java Basics - Anfänger-Themen 3
M warum interface iterator verwendbar? Java Basics - Anfänger-Themen 5
O Iterator - Durchlauf "einschränken" bzw. steuern&q Java Basics - Anfänger-Themen 2
K Collection und Iterator Java Basics - Anfänger-Themen 7
Q Iterator next erstellen Java Basics - Anfänger-Themen 4
S iterator problem Java Basics - Anfänger-Themen 3
S Iterator --__-- Zugriff auf nächstes Element Java Basics - Anfänger-Themen 5
N Set + Iterator oder doch nur zu blöd API zu lesen Java Basics - Anfänger-Themen 32
R Java 5.0 neue For schleife Iterator was ist der fehler? Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
R Iterator und HashMap Java Basics - Anfänger-Themen 10
G Probleme mit Iterator Java Basics - Anfänger-Themen 2
E umgededrehte if anweisung funzt nicht , iterator. Java Basics - Anfänger-Themen 2
A Iterator, wie funkioniert das richtig? Java Basics - Anfänger-Themen 6
S Iterator Schreibweise Java Basics - Anfänger-Themen 7
P ArrayList, iterator: Fehler in while Schleife Java Basics - Anfänger-Themen 2
T Iterator Java Basics - Anfänger-Themen 8
G Frage zur Iterator ? Java Basics - Anfänger-Themen 12
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
blackfeet Bildfadeffekt (Halptransparenz) & iterator Java Basics - Anfänger-Themen 8
C Problem mit verschachteltem Iterator Java Basics - Anfänger-Themen 2
R Problem mit Iterator Java Basics - Anfänger-Themen 6
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
R Enumeration oder Iterator? Java Basics - Anfänger-Themen 2
J Klasse Iterator Java Basics - Anfänger-Themen 5
D unregelmäßige NullPointerException bei LinkedList Iterator? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben