Or, simply, implementing iterator logic in your own class, on which you can iterate or even use for-each loop. Because, for-each works only on Iterator based collections.
Following is a generic Java 7 code that takes into account a simple custom linked list implementation that is generic and can be iterated over, using following steps.
Following is a generic Java 7 code that takes into account a simple custom linked list implementation that is generic and can be iterated over, using following steps.
1. The stuff we want to iterate upon has to be Iterable and expose
iterator().
2. Design a java.util.Iterator by overriding hasNext(), next() and remove().
package org.algorithms.linkedlist; import java.util.Iterator; import java.util.NoSuchElementException; public class LinkedList<T> implements Iterable<T> { Node<T> head, current; private static class Node<T> { T data; Node<T> next; Node(T data) { this.data = data; } } public LinkedList(T data) { head = new Node<>(data); } public Iterator<T> iterator() { return new LinkedListIterator(); } private class LinkedListIterator implements Iterator<T> { Node<T> node = head; @Override public boolean hasNext() { return node != null; } @Override public T next() { if (!hasNext()) throw new NoSuchElementException(); Node<T> prevNode = node; node = node.next; return prevNode.data; } @Override public void remove() { throw new UnsupportedOperationException("Removal logic not implemented."); } } public void add(T data) { Node current = head; while (current.next != null) current = current.next; current.next = new Node<>(data); } } class App { public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<>(1); list.add(2); list.add(4); list.add(3); //Test #1 System.out.println("using Iterator:"); Iterator<Integer> itr = list.iterator(); while (itr.hasNext()) { Integer i = itr.next(); System.out.print(i + " "); } //Test #2 System.out.println("\n\nusing for-each:"); for (Integer data : list) { System.out.print(data + " "); } } }
Output
using Iterator:
1 2 4 3
using for-each:
1 2 4 3
No comments:
Post a Comment
Liked or hated the post? Leave your words of wisdom! Thank you :)