Java Collections Framework: Map

Оценивание: задача 1: стандартная задача, 20 баллов, задача 2: творческая задача, 30 баллов.

Вершину иерархической пирамиды Java Collections Framework составляют два интерфейса. Понятное дело, один из них это Collections. Второй интерфейс — Map (Отображение) — является предметом рассмотрения в этом задании.
Начать выполнение задания следует со знакомства с интерфейсом Map по документации.

Вначале обратим внимание на общую концепцию Map — предоставить общий подход к работе с хранилищами пар «ключ» => «значение». Т.е. Map реализует отображение множества ключей типа K во множество значений типа V. Что-то вроде табличного задания функции аргументом которой является ключ.
Выделим методы, с которыми необходимо разобраться в первую очередь:

Не все реализации интерфейса допускают динамическое изменение отображения. Поэтому соответствующие функции являются опциональными:

И ещё одна группа функций назначение которых и так понятно:

Далее рассмотрим две задачи:

Задача 1. Получив на входе корпус языка (огромный набор атрибутированных текстов на каком-нибудь языке) построить частотный словарь. Знаки препинания, скобки, кавычки и числа должны быть удалены. Слова, содержащие в себе не буквенные символы, игнорируются целиком.

Задача 2. При автоматическом переводе необходимо из нескольких слов выбрать наиболее употребительное. Необходимо построить эффективную реализацию функции, которая для данного множества (Set) слов-ключей, определит то, которому соответствует максимальное значение.

Вам необходимо выбрать для каждой из задач наиболее эффективную реализацию интерфейса Map из имеющихся: Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap.
Если появится необходимость сделать свою реализацию, рассмотрите класс AbstractMap как заготовку.
И, конечно, нужно решить и протестировать решения обоих задач.

Задача 2 для групп Антоненко А.С.. Пусть задано некоторое число [latex]N[/latex]. Определить [latex]N[/latex] самых частых слов и их частоты (в процентном отношении от максимального количества слов). Рассмотрите два варианта этого задания: первый из них попроще — пусть вначале формируется частотный словарь, а уже потом рассчитывается статистика (перечень самых частных слов). Второй вариант соответствует случаю, когда в процессе подсчета нужно динамически обновлять статистику (при этом число [latex]N[/latex] относительно невелико, а количество запросов на выдачу самых частых на данный момент строк сопоставимо с количеством слов).