Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need of Iterator class in Java?

Tags:

java

The question might be pretty vague I know. But the reason I ask this is because the class must have been made with some thought in mind.

This question came into my mind while browsing through a few questions here on SO.

Consider the following code:

class A
{

    private int myVar;

    A(int varAsArg)
    {
          myVar = varAsArg;
    }

   public static void main(String args[])
   {

      List<A> myList = new LinkedList<A>();
      myList.add(new A(1));
      myList.add(new A(2));
      myList.add(new A(3));

      //I can iterate manually like this:
      for(A obj : myList)
                 System.out.println(obj.myVar);

      //Or I can use an Iterator as well:
      for(Iterator<A> i = myList.iterator(); i.hasNext();)
      {
         A obj = i.next();
         System.out.println(obj.myVar);
      }
   }
}

So as you can see from the above code, I have a substitute for iterating using a for loop, whereas, I could do the same using the Iterator class' hasNext() and next() method. Similarly there can be an example for the remove() method. And the experienced users had commented on the other answers to use the Iterator class instead of using the for loop to iterate through the List. Why?

What confuses me even more is that the Iterator class has only three methods. And the functionality of those can be achieved with writing a little different code as well.

Some people might argue that the functionality of many classes can be achieved by writing one's own code instead of using the class made for the purpose. Yes,true. But as I said, Iterator class has only three methods. So why go through the hassle of creating an extra class when the same job can be done with a simple block of code which is not way too complicated to understand either.


EDIT:

While I'm at it, since many of the answers say that I can't achieve the remove functionality without using Iterator,I would just like to know if the following is wrong, or will it have some undesirable result.

for(A obj : myList)
{
           if(obj.myVar == 1)
                 myList.remove(obj);
}

Doesn't the above code snippet do the same thing as remove() ?

like image 703
Kazekage Gaara Avatar asked Dec 04 '22 16:12

Kazekage Gaara


1 Answers

Iterator came long before the for statement that you show in the evolution of Java. So that's why it's there. Also if you want to remove something, using Iterator.remove() is the only way you can do it (you can't use the for statement for that).

like image 171
Francis Upton IV Avatar answered Dec 14 '22 11:12

Francis Upton IV