Collections Data Structure Java

/**
 * Copyright (c) 2005 Elie Levy 
 * All rights reserved
 * 
 * This License governs use of the accompanying Software, and your use of the
 * Software constitutes acceptance of this license.
 * 
 * You may use this Software for any non-commercial purpose, subject to the
 * restrictions in this license. Some purposes which can be non-commercial are
 * teaching, academic research, and personal experimentation. You may also
 * distribute this Software with books or other teaching materials, or publish
 * the Software on websites, that are intended to teach the use of the 
 * Software.
 * 
 * 
 * You may not use or distribute this Software or any derivative works in any
 * form for commercial purposes. Examples of commercial purposes would be
 * running business operations, licensing, leasing, or selling the Software, or
 * distributing the Software for use with commercial products.
 * 
 * You may modify this Software and distribute the modified Software for
 * non-commercial purposes, however, you may not grant rights to the Software 
 * or derivative works that are broader than those provided by this License. 
 * For example, you may not distribute modifications of the Software under
 * terms that would permit commercial use, or under terms that purport to 
 * require the Software or derivative works to be sublicensed to others.
 * 
 * You may use any information in intangible form that you remember after
 * accessing the Software. However, this right does not grant you a license to
 * any of the copyrights or patents for anything you might create using such
 * information.
 * 
 * In return, we simply require that you agree:
 * 
 * Not to remove any copyright or other notices from the Software.
 * 
 * 
 * That if you distribute the Software in source or object form, you will
 * include a verbatim copy of this license.
 * 
 * 
 * That if you distribute derivative works of the Software in source code form
 * you do so only under a license that includes all of the provisions of this
 * License, and if you distribute derivative works of the Software solely in
 * object form you do so only under a license that complies with this License.
 * 
 * 
 * That if you have modified the Software or created derivative works, and
 * distribute such modifications or derivative works, you will cause the
 * modified files to carry prominent notices so that recipients know that they
 * are not receiving the original Software. Such notices must state: (i) that
 * you have changed the Software; and (ii) the date of any changes.
 * 
 * 
 * THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS,
 * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR ANY WARRANTY OF TITLE
 * OR NON-INFRINGEMENT. ALSO, YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU
 * DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.
 * 
 * 
 * THAT NEITHER ZILONIS NOR THE AUTHOR WILL BE LIABLE FOR ANY DAMAGES RELATED
 * TO THE SOFTWARE OR THIS LICENSE, INCLUDING DIRECT, INDIRECT, SPECIAL,
 * CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM EXTENT THE LAW PERMITS,
 * NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU MUST PASS THIS
 * LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR 
 * DERIVATIVE WORKS.
 * 
 * 
 * That if you sue anyone over patents that you think may apply to the Software
 * or anyone's use of the Software, your license to the Software ends
 * automatically.
 * 
 * 
 * That your rights under the License end automatically if you breach it in any
 * way.
 * 
 * 
 * Elie Levy reserves all rights not expressly granted to you in this 
 * license.
 *  
 */
import java.util.Iterator;
/**
 * A very lite single linked list
 */
public class LiteList implements Iterable {
    
    private Node first;
    public void add(Element element) {
  first = new Node(element,first);
    }
    public Iterator iterator() {
  return new LiteIterator();
    }
    private class LiteIterator implements Iterator {
  Node current;
  public LiteIterator() {
      current = first;
  }
  
  public boolean hasNext() {
      return (current!=null);
  }
  public Element next() {
      Element result = current.getElement();
      current = current.getNext();
      return result;
  }
  public void remove() {
  }
    }
    private class Node {
  private Element element;
  private Node next;
  
  public Node(Element element, Node next) {
      this.element = element;
      this.next = next;
  }
  public Element getElement() {
      return element;
  }
  public Node getNext() {
      return next;
  }
    } 
}