2016-06-21 6 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);             
} 

Предположим, что учащийся имеет три элемента данных rollno, имя и возраст. Итак, мой вопрос в том, почему мы понижаем формулировку Student st = (Student) itr.next(); Но если мы создадим ArrayList, имеющий String как типы элементов данных, тогда нет необходимости опускать его с помощью итератора. Пожалуйста, помогите очистить мои сомнения.Интерфейс и метод итератора

+1

IIRC 'al.iterator()' будет возвращать 'Iterator ', поэтому нет необходимости в трансляции. Это необходимо только потому, что вы удалили генерики из «Итератор itr». Btw, то же самое было бы верно для ArrayList ', если вы испытываете разные результаты, у вас, скорее всего, есть другой код (например, вы используете' Iterator 'в этом случае). – Thomas

+0

Вы можете просто изменить 'Iterator itr' на' Iterator itr'. – Zircon

+0

Я считаю, что вам все равно нужно использовать: 'String st = (String) itr.next();' иначе он не будет компилироваться. Как вы предположили, что вам не нужно кастовать, если тип объекта в списке - String – SomeDude

ответ

3

Это потому, что вы используете необработанный Iterator.

параметризующих ваш Iterator как таковой: Iterator<Student> itr=al.iterator();

Тогда вам не придется явно привести next вызов (возвращение Object, когда сырье) в Student.

Вы также можете сэкономить себе беспорядок, если вы просто итерацию и печать, а также использовать быстрое перечисление вместо:

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

Iterator могут воспользоваться дженериков, так что вы можете иметь Iterator<Student>, который будет возвращать Student экземпляр при вызове next().

Фактически al.iterator() уже возвращает Iterator<Student>, вы просто стираете свои дженерики, назначая его необработанному Iterator.

Отметьте этот вопрос: Iterator vs Iterator in java.

Смежные вопросы