1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.supercsv.util;
17
18 import java.util.HashMap;
19 import java.util.Set;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class ThreeDHashMap<K1, K2, K3, V> {
37
38 private final HashMap<K1, HashMap<K2, HashMap<K3, V>>> map = new HashMap<K1, HashMap<K2, HashMap<K3, V>>>();
39
40
41
42
43
44
45
46
47
48
49 public boolean containsKey(final K1 firstKey, final K2 secondKey) {
50
51 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
52 if( innerMap1 == null ) {
53 return false;
54 }
55
56 return innerMap1.containsKey(secondKey);
57 }
58
59
60
61
62
63
64
65
66
67
68
69
70 public boolean containsKey(final K1 firstKey, final K2 secondKey, final K3 thirdKey) {
71
72 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
73 if( innerMap1 == null ) {
74 return false;
75 }
76
77
78 final HashMap<K3, V> innerMap2 = innerMap1.get(secondKey);
79 if( innerMap2 == null ) {
80 return false;
81 }
82 return innerMap2.containsKey(thirdKey);
83 }
84
85
86
87
88
89
90
91
92 public HashMap<K2, HashMap<K3, V>> get(final K1 firstKey) {
93 return map.get(firstKey);
94 }
95
96
97
98
99
100
101
102
103 public TwoDHashMap<K2, K3, V> getAs2d(final K1 firstKey) {
104 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
105 if( innerMap1 != null ) {
106 return new TwoDHashMap<K2, K3, V>(innerMap1);
107 } else {
108 return new TwoDHashMap<K2, K3, V>();
109 }
110
111 }
112
113
114
115
116
117
118
119
120
121
122 public HashMap<K3, V> get(final K1 firstKey, final K2 secondKey) {
123
124 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
125 if( innerMap1 == null ) {
126 return null;
127 }
128
129 return innerMap1.get(secondKey);
130 }
131
132
133
134
135
136
137
138
139
140
141
142
143 public V get(final K1 firstKey, final K2 secondKey, final K3 thirdKey) {
144
145 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
146 if( innerMap1 == null ) {
147 return null;
148 }
149
150
151 final HashMap<K3, V> innerMap2 = innerMap1.get(secondKey);
152 if( innerMap2 == null ) {
153 return null;
154 }
155 return innerMap2.get(thirdKey);
156 }
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171 public Object set(final K1 firstKey, final K2 secondKey, final K3 thirdKey, final V value) {
172
173 HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
174
175 if( innerMap1 == null ) {
176
177 innerMap1 = new HashMap<K2, HashMap<K3, V>>();
178 map.put(firstKey, innerMap1);
179 }
180
181
182 HashMap<K3, V> innerMap2 = innerMap1.get(secondKey);
183 if( innerMap2 == null ) {
184
185 innerMap2 = new HashMap<K3, V>();
186 innerMap1.put(secondKey, innerMap2);
187 }
188
189 return innerMap2.put(thirdKey, value);
190 }
191
192
193
194
195
196
197 public int size() {
198 return map.size();
199 }
200
201
202
203
204
205
206
207
208 public int size(final K1 firstKey) {
209
210 final HashMap<K2, HashMap<K3, V>> innerMap = map.get(firstKey);
211 if( innerMap == null ) {
212 return 0;
213 }
214 return innerMap.size();
215 }
216
217
218
219
220
221
222
223
224
225
226 public int size(final K1 firstKey, final K2 secondKey) {
227
228 final HashMap<K2, HashMap<K3, V>> innerMap1 = map.get(firstKey);
229 if( innerMap1 == null ) {
230 return 0;
231 }
232
233
234 final HashMap<K3, V> innerMap2 = innerMap1.get(secondKey);
235 if( innerMap2 == null ) {
236 return 0;
237 }
238 return innerMap2.size();
239 }
240
241
242
243
244
245
246 public Set<K1> keySet() {
247 return map.keySet();
248 }
249
250 }