用于计算相等项目频率的数据结构

时间:2016-07-06 08:12:23

标签: java algorithm data-structures hashmap set

我需要拥有像HashSet这样的数据结构。

  1. 不应将相同的项目添加到集合中
  2. 但是,不应添加相同的项目,而应该计算此项目的添加次数。
  3. 据我所知,HashSet首先计算hashCode,如果hashCode相同,则检查equals方法是否为真,否则不会添加项目,否则为相同的hashCode,但另一个equals将添加到存储桶链接列表中。

    我需要做的只是保留Set之类的唯一对象,但仅使用equals方法,并且对象等于与每个对象关联的增量计数器。

    是否已经实施了这样的数据结构,或者我应该创建自己的数据结构?

2 个答案:

答案 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;}来获取集合中对象的出现次数。