我需要拥有像HashSet
这样的数据结构。
据我所知,HashSet
首先计算hashCode
,如果hashCode
相同,则检查equals
方法是否为真,否则不会添加项目,否则为相同的hashCode
,但另一个equals
将添加到存储桶链接列表中。
我需要做的只是保留Set
之类的唯一对象,但仅使用equals
方法,并且对象等于与每个对象关联的增量计数器。
是否已经实施了这样的数据结构,或者我应该创建自己的数据结构?
答案 0 :(得分:3)
看来你真正需要的是一张地图。对于每件商品,您都可以拥有商品数量
public class ItemCounter<T>{
private Map<T, Integer> counts = new HashMap<T, Integer>();
public void addItem(T item){
Integer numberOfOcurrences = counts.get( item );
numberOfOcurrences = numberOfOcurrences == null ? 0 : numberOfOcurrences+1;
counts.put( item, numberOfOcurrences);
}
public Integer getCount( T item ){
Integer numberOfOcurrences = counts.get( item );
return numberOfOcurrences == null ? 0 : numberOfOcurrences;
}
}
答案 1 :(得分:1)
最简单的方法(没有依赖性)是HashMap<Element, Integer>
。或者您可以使用具有count(Object)
方法的Guava&#39;}来获取集合中对象的出现次数。