Hey everybody I'm working with java, So I am writing a class called ordered set. It is a class that is cross between a set and a queue. In other words, it is a queue without any duplicates. So I know I have to implement the Iterable interface, and write an iterator method. To write the method I have to then implement the iterator interface.
package comp345;
import java.util.Iterator;
import java.util.NoSuchElementException;
class OrderedSet implements Iterable<Object>
{
private Object[] queue; //This is how the OrderedSet is represented, a queue of Objects
private int counter; //Counter to keep track of current position of queue
private int queueSize; //Keep track of the queue;
//Constructor
public OrderedSet(int size)
{
this.queue = new Object[size];
this.counter = 0;
this.queueSize = size - 1;
//Instantiate each instance of the object in the object array
for(int i = 0; i < queue.length; i++)
{
queue[i] = new Object();
}
}
/**
* Ensures that this collection contains the specified element. If it
* is not already in the collection it is added it to the back of the queue.
* @param e element whose presence in this collection is to be ensured
* @return true if this collection changed as a result of the call
* @throws NullPointerException if the specified element is null
*/
boolean add( Object i )
{
if( i == queue[counter])
{
return false;
}
else if( i == null )
throw new NullPointerException();
else
{
queue[counter] = i; //Add Object to back of Queue
return true;
}
}
/**
* Removes all of the elements from this collection. The collection will be
* empty after this method returns.
*/
void clear()
{
for(int i = 0; i < queue.length; i++)
{
queue[i] = null;
}
}
/**
* Returns true if this collection contains no elements.
* @return true if this collection contains no elements
*/
boolean isEmpty()
{
if(queue[0] == null)
return true;
else
return false;
}
/**
* Retrieves, but does not remove, the head of this queue, or returns null
* if this queue is empty
* @return the head of this queue, or null if this queue is empty
*/
Object peek()
{
if(queue[counter] != null )
return queue[counter];
else
return null;
}
/**
* Retrieves and removes the head of the queue.
* @return the head of this queue
* @throws NoSuchElementException if this queue is empty
*/
Object remove()
{
if(queue[0] != null )
{
Object temp = queue[0];
queue[0] = queue[1];
return temp;
}
else
throw new NoSuchElementException();
}
public class SetIterator implements Iterator<Object>
{
private int counter;
public SetIterator()
{
this.counter = 0;
}
@Override
public Object next()
{
counter ++;
if(queueSize == counter)
return null;
else if(queue[counter] != null)
return (Object) queue[counter];
else
throw new NoSuchElementException();
}
@Override
public boolean hasNext()
{
counter++;
if(queueSize < counter)
return false;
else if(queue[counter] != null)
return true;
return false;
}
@Override
public void remove()
{
throw new UnsupportedOperationException();
}
}
@Override
public Iterator<Object> iterator()
{
return new SetIterator();
}
public static void main(string args[])
{
OrderedSet os;
os.add("hello");
os.add(4);
os.add("bye");
for(Object o: os)
{
System.out.println(o);
}
}
}