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