code: @Override
  	public synchronized boolean contains(Object o) {
  		if (start == end) return false; // empty
  		if (end == -1) {
  			// full
  			for (int i = array.length - 1; i >= 0; --i)
  				if (array[i].equals(o))
  					return true;
  			return false;
  		}
  		if (end < start) {
  			for (int i = array.length - 1; i >= start; --i)
  				if (array[i].equals(o))
  					return true;
  			for (int i = 0; i < end; ++i)
  				if (array[i].equals(o))
  					return true;
  			return false;
  		}
  		for (int i = start; i < end; ++i)
  			if (array[i].equals(o))
  				return true;
  		return false;
  	}
docs: other operation which may cost