可向该计数器对象中添加对象,相等的对象(通过equals()方法比较是否相等)的个数被保存。可获取其中某个对象的个数,也可以获取个数最多的对象及其个数。可用于多线程环境。如有不妥之处,欢迎指正。
import java.util.*;
public final class Counter{
private Hashtable data = new Hashtable();
private Set maxObject = Collections.synchronizedSet(new HashSet());
private volatile int maxCount;
public boolean contains(Object object){
return data.containsKey(object);
}
public synchronized void add(Object object){
int count = 0;
if (contains(object)){
count = count(object);
}
data.put(object, new Integer(++count));
if (maxCount <= count){
if (maxCount < count) maxObject.clear();
maxObject.add(object);
maxCount = count;
}
}
public int count(Object object){
return ((Integer)data.get(object)).intValue();
}
public synchronized void clear(){
data.clear();
maxObject.clear();
maxCount = 0;
}
public Object[] maxObject(){
return maxObject.toArray();
}
public synchronized int maxCount(){
return maxCount;
}
public String toString(){
Enumeration keys = data.keys();
Enumeration values = data.elements();
String res = "";
while (keys.hasMoreElements()){
res += keys.nextElement().toString() + "="
+ values.nextElement().toString() + ",";
}
res += "maxObject=[";
Iterator maxKeys = maxObject.iterator();
while (maxKeys.hasNext())
res += maxKeys.next().toString() + ",";
if (res.indexOf(",") > -1) res = res.substring(0, res.length() - 1);
res += "],maxCount=" + maxCount;
return res.toString();
}
}