2016-06-21 4 views
-1
ArrayList<Student> al = new ArrayList<Student>(); 
Iterator itr = al.iterator(); 
while (itr.hasNext()) 
{ 
    Student st = (Student) itr.next(); 
    System.out.println(st.rollno+" "+st.name+""+st.age);             
} 

Angenommen, Student-Klasse mit drei Datenelemente Rollno, Name und Alter. Also, meine Frage ist, warum wir in der Aussage Student st = (Student) itr.next(); Aber wenn wir eine ArrayList mit String als Typen von Datenelementen erstellen, ist es nicht notwendig, sie erneut mit Iterator zu reduzieren. Bitte helfen Sie, meine Zweifel zu beseitigen.Iterator-Schnittstelle und Methode

+1

IIRC 'al.iterator()' würde einen 'Iterator ' zurückgeben, so dass es keine Notwendigkeit für die Besetzung gibt. Es wird nur benötigt, weil Sie die Generika aus 'Iterator itr' entfernt haben. Btw, das gleiche gilt für 'ArrayList ', wenn Sie unterschiedliche Ergebnisse haben, haben Sie höchstwahrscheinlich einen anderen Code (z. B. verwenden Sie 'Iterator ' in diesem Fall). – Thomas

+0

Sie könnten einfach "Iterator itr" in "Iterator itr" ändern. – Zircon

+0

Ich glaube, du musst noch casten: 'String st = (String) itr.next();' sonst wird nicht kompiliert. Wie sind Sie davon ausgegangen, dass Sie nicht umwandeln müssen, wenn der Objekttyp in der Liste String ist? – SomeDude

Antwort

3

Das ist, weil Sie eine rohe Iterator verwenden.

Parametrieren Ihre Iterator als solche: Iterator<Student> itr=al.iterator();

Dann werden Sie nicht explizit die next Aufruf werfen müssen (Object wenn roh Rückkehr) zu Student.

Sie können auch selbst die Unordnung ersparen, wenn Sie gerade und Druck laufen, und schnelle Aufzählung verwenden stattdessen:

for (Student s: al) { 
    // print stuff 
} 
1

Iterator Vorteil von Generika nehmen, so dass Sie ein Iterator<Student> haben können, dass eine zurückkehren Student Instanz beim Aufruf next().

Tatsächlich gibt bereits eine Iterator<Student> zurück, Sie löschen gerade seine Generika, indem Sie es einem rohen Iterator zuweisen.

Überprüfen Sie diese verwandte Frage: Iterator vs Iterator in java.