数据结构保存元素和每个元素的相应计数?

时间:2014-07-16 05:52:44

标签: java data-structures

是否有这样的Java数据结构可以存储唯一元素和任何重复元素的数量?

例如说我有给定的数据:“a”,“a”,“a”,“b”,“b”,“c”,“d” 我将每个数据元素添加到此数据结构中,并获得类似于:

的内容

元素:计数 a:3 b:2 c:1 d:1

是否有一个java数据结构已经用来做类似的事情?

2 个答案:

答案 0 :(得分:4)

是。番石榴有一个Multiset类型你应该用它。

Multiset<String> bag = LinkedHashMultiset.create();
Collections.addAll(bag, "a", "a", "a", "b", "b", "c", "d");
for (Multiset.Entry<String> entry : bag.entrySet()) {
    System.out.println(entry.getElement() + " : " + entry.getCount());
}

根据您想要的迭代顺序选择正确的Multiset实现:

  • 要通过首次插入进行排序,请使用LinkedHashMultiset(如上例所示)。
  • 要按自然顺序或特定比较器进行排序,请使用TreeMultiset
  • 如果您不关心订单,请使用HashMultiset

显然,这些映射与您为选择Map实施所做的相同决策。

答案 1 :(得分:1)

您可以使用HashMap<String, Integer>来执行您想要的操作。 你可以像这样使用它:

public class Test {
    public static void main(String[] args) {
        String[] data = new String[]{"a", "a", "a", "b", "b", "c", "d"};
        Map<String, Integer> map = new HashMap<String, Integer>();
        for(String d : data) {
            Integer value = map.get(d);
            if(value == null) {
                map.put(d, 1);
            }
            else {
                map.put(d, value + 1);
            }
        }
        System.out.println(map);
    }
}

然后打印出这样的东西:

{d=1, b=2, c=1, a=3}