我需要像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;
    }
}

09-26 23:03