public Iterator<T> iterator() {
		return new Iterator<T>() {
			private int pos, knownMod = modCount;
			
			{
				iteratorCount++;
			}
			
			public boolean hasNext() {
				boolean hn = false;
				
				for(int a = pos; a < size(); a++) {
					if(get(a) != null) {
						hn = true;
						break;
					}
				}
				
				if(!hn) {
					iteratorCount--;
					if(iteratorCount == 0)
						clean();
				}
				
				return hn;
			}
			
			private T nextItem() {
				checkForCoMod();
				
				if(!hasNext())
					throw new NoSuchElementException("reached the end");
				
				T t = null;
				while((t = get(pos++)) == null);
				
				return t;
			}
			
			public T next() {
				T t = nextItem();
				if(t == null)
					System.out.println("IT'S NULL!!!");
				return t;
			}
			
			public void remove() {
				checkForCoMod();
				
				Bag.this.remove(--pos);
				knownMod = modCount;
			}
			
			private void checkForCoMod() {
				if(knownMod != modCount)
					throw new ConcurrentModificationException();
			}
		};
	}