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