我需要像HashSet
这样的数据结构。
它不应将同一项添加到集合中
但它不应该添加相同的项,而是应该计算添加此项的次数。
据我所知,首先HashSet
计算hashCode
,如果hashCode
相同,则检查equals
方法如果为true,则不添加项,否则具有相同hashCode
但另一个equals
的项将添加到bucket链表中。
我需要做的是只保留像Set
那样的唯一对象,但只使用equals
方法,并且如果对象等于与每个对象关联的递增计数器。
是否已经实现了这样的数据结构,或者我应该创建自己的数据结构?
最佳答案
看来你真正需要的是一张地图对于每个项目,您可以拥有项目的数量
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;
}
}