| Histogram.java |
1 /**
2 * Distribution License:
3 * JSword is free software; you can redistribute it and/or modify it under
4 * the terms of the GNU Lesser General Public License, version 2.1 or later
5 * as published by the Free Software Foundation. This program is distributed
6 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
7 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8 * See the GNU Lesser General Public License for more details.
9 *
10 * The License is available on the internet at:
11 * http://www.gnu.org/copyleft/lgpl.html
12 * or by writing to:
13 * Free Software Foundation, Inc.
14 * 59 Temple Place - Suite 330
15 * Boston, MA 02111-1307, USA
16 *
17 * © CrossWire Bible Society, 2005 - 2016
18 *
19 */
20 package org.crosswire.common.util;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 /**
26 * A simple implementation of a histogram. It would be nice to enhance it to
27 * order on frequency.
28 *
29 * @see gnu.lgpl.License The GNU Lesser General Public License for details.
30 * @author DM Smith
31 */
32 public class Histogram {
33 /**
34 * Create an empty histogram
35 */
36 public Histogram() {
37 hist = new HashMap<String, Counter>();
38 }
39
40 /**
41 * Note that this key has been seen one time more than before.
42 *
43 * @param key the key to increment
44 */
45 public void increment(String key) {
46 Counter counter = hist.get(key);
47 if (counter == null) {
48 counter = new Counter();
49 hist.put(key, counter);
50 }
51 counter.increment();
52 }
53
54 public void clear() {
55 hist.clear();
56 }
57
58 /**
59 * The format of the histogram is an unordered list of string and the counts
60 * of the number of times it has been seen.
61 *
62 * @return the resultant histogram
63 * @see java.lang.Object#toString()
64 */
65 @Override
66 public String toString() {
67 StringBuilder buf = new StringBuilder();
68 for (Map.Entry<String, Counter> entry : hist.entrySet()) {
69 buf.append(entry.getKey());
70 buf.append('\t');
71 buf.append(entry.getValue().toString());
72 buf.append('\n');
73 }
74 return buf.toString();
75 }
76
77 /**
78 * Trivial mutable counting integer class.
79 */
80 private static class Counter {
81 Counter() {
82 }
83
84 public void increment() {
85 counter++;
86 }
87
88 @Override
89 public String toString() {
90 return Integer.toString(counter);
91 }
92
93 private int counter;
94 }
95
96 private Map<String, Counter> hist;
97
98 }
99