1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.struts2.util;
19
20 /***
21 * Quickly matches a prefix to an object.
22 *
23 */
24 public class PrefixTrie {
25
26
27 private static final int SIZE = 128;
28
29 Node root = new Node();
30
31 public void put(String prefix, Object value) {
32 Node current = root;
33 for (int i = 0; i < prefix.length(); i++) {
34 char c = prefix.charAt(i);
35 if (c > SIZE)
36 throw new IllegalArgumentException("'" + c + "' is too big.");
37 if (current.next[c] == null)
38 current.next[c] = new Node();
39 current = current.next[c];
40 }
41 current.value = value;
42 }
43
44 public Object get(String key) {
45 Node current = root;
46 for (int i = 0; i < key.length(); i++) {
47 char c = key.charAt(i);
48 if (c > SIZE)
49 return null;
50 current = current.next[c];
51 if (current == null)
52 return null;
53 if (current.value != null)
54 return current.value;
55 }
56 return null;
57 }
58
59 static class Node {
60 Object value;
61 Node[] next = new Node[SIZE];
62 }
63 }