package timeflow.util; import java.util.*; public class DoubleBag implements Iterable { private HashMap table; private double max; public DoubleBag() { table=new HashMap(); } public double getMax() { return max; } public List listTop(int n, boolean useSum) { int count=0; Iterator i=list(useSum).iterator(); List top=new ArrayList(); while (count list(final boolean useSum) { List result=new ArrayList(); result.addAll(table.keySet()); Collections.sort(result, new Comparator() { public int compare(T x, T y) { double d= useSum ? num(y)-num(x) : average(y)-average(x); return d>0 ? 1 : (d<0 ? -1 : 0); } }); return result; } public double num(T x) { Count c=table.get(x); if (c!=null) return c.num; else return 0; } public double average(T x) { Count c=table.get(x); return c.num/c.vals; } public void add(T x, double z) { if (Double.isNaN(z)) return; Count c=table.get(x); double sum=z; if (c!=null) { c.add(z); sum=c.num; } else { table.put(x, new Count(z)); } max=Math.max(sum, max); } class Count { double num; int vals; public Count(double num) { this.num=num; vals=1; } public double add(double x) { vals++; return num+=x; } } public int size() { return table.size(); } public List unordered() { List result=new ArrayList(); result.addAll(table.keySet()); return result; } public int removeLessThan(int cut) { Set small=new HashSet(); for (T x: table.keySet()) { if (num(x) b=new DoubleBag(); b.add("a",1); b.add("b",2); b.add("a",3); System.out.println(b.num("a")); System.out.println(b.num("b")); System.out.println(b.num("c")); List s=b.list(true); for (int i=0; i iterator() { return table.keySet().iterator(); } }