public Iterator<Word> valiterator() {
			final LinkedList<HashMap<Integer, Object>> pop = new LinkedList<HashMap<Integer, Object>>();
			pop.add(trie);
			return new Iterator<Word>() {
				LinkedList<HashMap<Integer, Object>> statck = pop;
				Word word = null;

				@SuppressWarnings("unchecked")
				@Override
				public boolean hasNext() {
					word = null;
					HashMap<Integer, Object> node;
					while (!statck.isEmpty()) {
						node = statck.pop();
						for (Entry<Integer, Object> entry : node.entrySet()) {
							if (entry.getKey() == EndFlag) {
								word = (Word) entry.getValue();
							} else {
								statck.push((HashMap<Integer, Object>) entry
										.getValue());
							}
						}
						if (word != null)
							break;
					}
					return word != null;
				}

				@Override
				public Word next() {
					return word;
				}

				@Override
				public void remove() {
					throw new IllegalAccessError("not soupport!");
				}
			};
		}