Какую структуру данных я могу использовать для подсчета вхождений кода страны? - PullRequest
6 голосов
/ 21 сентября 2011

Мне нужна какая-то структура данных, пока я не знаю, которая была бы наиболее подходящей.

Вот то, с чем я работаю: у меня есть куча строк обработки данных, и у каждой строки есть свой код страны.

Я хочу получить в результате, сколько раз каждый код страны повторяется в течение всего процесса.

Ответы [ 5 ]

8 голосов
/ 21 сентября 2011

Вы можете попробовать 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.
3 голосов
/ 21 сентября 2011

Я бы использовал HashMap с кодом страны в качестве ключа и счетчиком в качестве значения. Постройте карту из своей коллекции и увеличьте число, если оно уже есть на карте.

2 голосов
/ 21 сентября 2011

Создайте карту, используя код страны String в качестве ключа и текущий счетчик в качестве значения.

Конечно, вы понимаете, что вы можете получить такую ​​вещь непосредственно из SQL-запроса:

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

Вы получите ResultSet с кодом страны и количеством пар.Это легко загрузить на карту.

0 голосов
/ 22 сентября 2014

Гуава предлагает AtomicLongMap

0 голосов
/ 21 сентября 2011

Чтобы завершить ответ чем-то отличным от HashMap .

  • Если ваш список кодов стран можно или легко превратить в не очень редкую числовую последовательность, попробуйте int[] или long[].
  • Если диапазон кодов вашей страны невелик, но не содержит много элементов, создайте CountryCode enum и используйте EnumMap для хранения сумм:

Пример:

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

Облегченные структуры данных будут работать лучше и потреблять меньше памяти / сборщика мусора.Итак, массив должен быть самым быстрым.EnumMap - это своего рода скрытый драгоценный камень, который при правильных обстоятельствах может также дать вам повышение производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...