我可以使用什么数据结构来计算国家/地区代码的出现次数?

时间:2011-09-21 19:21:16

标签: java data-structures

我需要某种最不适合的数据结构。

以下是我正在使用的内容:我有一堆数据处理行,每行都有自己的国家/地区代码。

我希望获得每个国家/地区代码在整个过程中重复多少次。

5 个答案:

答案 0 :(得分:8)

您可以尝试HashMap。使用HashMap,您可以使用国家/地区代码作为键,并将每个显示的次数计为存储在该键中的值。如果您是第一次遇到特定的国家/地区代码,请将其插入到地图中,初始值为1;否则,增加现有值。

HashMap<String, Integer> myMap = new HashMap<String, Integer>();

for (... record : records) {
    String countryCode = record.getCountryCode();

    int curVal;
    if (myMap.containsKey(countryCode)) {
        curVal = myMap.get(countryCode);
        myMap.put(countryCode, curVal + 1);
    } else {
        myMap.put(countryCode, 1);
    }
}

// myMap now contains the count of each country code, which
// can be used for whatever purpose needed.

答案 1 :(得分:3)

我会使用HashMap,国家/地区代码作为键,计数作为值。从您的集合构建地图,如果已经在地图中,则增加计数。

答案 2 :(得分:2)

使用国家/地区代码String作为键创建地图,将当前计数作为值。

当然,您意识到您可以直接从SQL查询中获取此类内容:

select country_code, count(country_code)
from your_table
group by country_code
order by country_code

您将获得包含国家/地区代码和计数对的ResultSet。这很容易加载到地图中。

答案 3 :(得分:0)

使用HashMap以外的其他内容完成答案。

  • 如果您的国家/地区代码列表很容易变成非稀疏的数字序列,请尝试使用int[]long[]
  • 如果您的国家/地区代码范围稀疏,但没有多少元素,请创建CountryCode enum并使用EnumMap存储金额:

示例:

Map<CountryCode, Long> countryCodeAppearances = 
       new EnumMap<CountryCode,Long>(CountryCode.class);

轻量级数据结构将更好地执行并减少内存/垃圾收集开销。所以,数组应该是最快的。 EnumMap是一种隐藏的宝石,在适当的情况下也可以为您带来性能提升。

答案 4 :(得分:0)

Guava提供AtomicLongMap