import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
public class LimitedMemory <GType extends Valuable> 
      implements Iterable<GType>
{
   private static final int iCapacity = 7; 
   private ArrayList<GType> iArrayList;
   private Random iRandom;
   public LimitedMemory()
   {
      iArrayList = new ArrayList<GType>(iCapacity);
      iRandom = new Random();
   }
   public void add(GType pGType)
   {
      if (iArrayList.size()<iCapacity)
	 iArrayList.add(pGType);
      else
	 iArrayList.set(iRandom.nextInt(iCapacity), pGType);
   }
   public String toString()
   {
      return iArrayList.toString();
   }
   public int value()
   {
      int tSum = 0;
      for (GType tGType : iArrayList)
      {
	 tSum += tGType.value();
      }
      return tSum;
   }
   public Iterator<GType> iterator()
   {
      return iArrayList.iterator();
   }
}
