public Iterator<Entry<String, Word>> entryiterator() {
			final LinkedList<Pair<Integer, Object>> pop = new LinkedList<Pair<Integer, Object>>();
			pop.add(new Pair<Integer, Object>((int) '#',
					new Object[] { trie, 0 }));
			return new Iterator<Entry<String, Word>>() {
				LinkedList<Pair<Integer, Object>> statck = pop;
				Word word = null;
				StringBuilder buffer = new StringBuilder();

				@SuppressWarnings("unchecked")
				@Override
				public boolean hasNext() {
					word = null;
					Pair<Integer, Object> node;
					int deep;
					Object[] value;
					while (!statck.isEmpty()) {
						node = statck.pop();
						value = (Object[]) node.getValue();
						deep = (Integer) value[1];
						if (node.getKey() > 0) {
							buffer.setLength(deep);
							buffer.append((char) (int) node.getKey());
						} else {
							word = (Word) value[0];
							break;
						}
						HashMap<Integer, Object> sub = (HashMap<Integer, Object>) value[0];
						for (Entry<Integer, Object> entry : sub.entrySet()) {
							statck.push(new Pair<Integer, Object>(entry
									.getKey(), new Object[] { entry.getValue(),
									deep + 1 }));
						}
					}
					return word != null;
				}

				@Override
				public Entry<String, Word> next() {
					Entry<String, Word> we = new Pair<String, Word>(
							buffer.substring(1), word);
					return we;
				}

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