01: package com.jamonapi.utils;
02:
03: /**
04: * Case Insensitive HashMap() - If the maps key is a string then the following keys are all considered equal:
05: * myKey<br>
06: * MYKEY<br>
07: * MyKey<br>
08: * ...
09: *
10: * Other than that this class works like a regular HashMap.
11: */
12:
13: import java.util.*;
14:
15: public class AppMap extends java.util.HashMap {
16:
17: public AppMap() {
18:
19: }
20:
21: /** Constructs an empty HashMap with the default initial capacity (16) and the default load factor (0.75).
22: *
23: */
24:
25: public AppMap(int initialCapacity) {
26: super (initialCapacity);
27: }
28:
29: /** Constructs an empty HashMap with the specified initial capacity and the default load factor (0.75). */
30: public AppMap(int initialCapacity, float loadFactor) {
31: super (initialCapacity, loadFactor);
32: }
33:
34: /** Constructs an empty HashMap with the specified initial capacity and load factor. */
35: public AppMap(Map m) {
36: putAll(m);
37: }
38:
39: public Object put(Object key, Object object) {
40: return super .put(convertKey(key), object);
41: }
42:
43: public boolean containsKey(Object key) {
44: // The normal case is done first as a performance optimization. It seems to make checks around 30% faster
45: // due to only converting the case of the string comparison only when required.
46: return super .containsKey(key)
47: || super .containsKey(convertKey(key));
48: }
49:
50: public Object get(Object key) {
51: return super .get(convertKey(key));
52: }
53:
54: public static Object get(Map map, Object key)
55: throws AppBaseException {
56: Object object = map.get(key);
57:
58: if (object != null)
59: return object;
60: else
61: throw new AppBaseException(key
62: + " does not exist in the HashMap.");
63: }
64:
65: protected Object convertKey(Object key) {
66: if (key instanceof String && key != null)
67: key = key.toString().toLowerCase();
68:
69: return key;
70:
71: }
72:
73: public static Map createInstance() {
74: return new AppMap();
75: }
76:
77: public static void main(String[] args) {
78: Map map = new HashMap();
79: map.put("HeLLo", "world");
80: System.out.println("Should return null: " + map.get("HELLO"));
81: System.out.println("Contents of HashMap=" + map);
82: map = new AppMap(map);
83: System.out
84: .println("Should return 'world': " + map.get("HELLO"));
85: System.out.println("Contents of AppMap=" + map);
86: }
87:
88: }
|