线程安全的计数器类Counter

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

可向该计数器对象中添加对象,相等的对象(通过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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航