Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: frequency, table

Какую структуру данных удобно использовать для подсчета символов?

Вопрос проверяет умение выбирать подходящую структуру данных для подсчета частот и оценивать компромиссы по памяти и скорости.

Короткий ответ

Чаще всего используют массив или HashMap.
Массив подходит, если алфавит ограничен и известен заранее.
HashMap удобен для Unicode или произвольных символов.
Выбор зависит от требований к памяти и универсальности.
Обе структуры позволяют считать частоты за линейное время.

Длинный ответ

Для подсчета символов важно учитывать размер алфавита и простоту реализации.

Массив

Определение:
Массив используется как таблица частот, где индекс соответствует символу.

Подходит, если:

  1. Алфавит ограничен (ASCII, латиница).

  2. Известен диапазон кодов символов.

  3. Важна максимальная скорость.

Пример:

int[] freq = new int[256];
for (char c : s.toCharArray()) {
    freq[c]++;
}

Плюсы:

  1. O(1) доступ.

  2. Минимальные накладные расходы.

  3. Простая реализация.

Минусы:

  1. Фиксированный размер.

  2. Неудобен для большого Unicode-диапазона.

HashMap<Character, Integer>

Определение:
HashMap хранит пары «символ → количество».

Подходит, если:

  1. Алфавит заранее неизвестен.

  2. Используется Unicode.

  3. Важна гибкость.

Пример:

Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
    map.put(c, map.getOrDefault(c, 0) + 1);
}

Плюсы:

  1. Универсальность.

  2. Работает с любыми символами.

Минусы:

  1. Больше памяти.

  2. Медленнее массива из-за хеширования.

Краткий вывод

Для подсчета символов массив — самый быстрый вариант при ограниченном алфавите, а HashMap — универсальное решение для произвольных символов.

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • Java

    Java

Ключевые слова

#frequency

#table

Подпишись на Java Developer в телеграм