class ConcurrentTree extends ConcurrentTreeNode<K, V> {

	public List<V> getMatches(final K[] path) {
		final List<V> values = new LinkedList<V>();
		ConcurrentTreeNode<K, V> node = this;
		for (final K part : path) {
			if (node.getValue() != null) {
				values.add(node.getValue());
			}
			node = node.getChild(part);
			if (node == null) {
				break;
			}
		}
		if ((node != null) && (node.getValue() != null)) {
			values.add(node.getValue());
		}
		Collections.reverse(values);
		return values;
	}

}