Как инициализировать TreeMap с предварительно отсортированными данными? - PullRequest
5 голосов
/ 12 марта 2011

Мое приложение использует TreeMap , чтобы хранить данные отсортированными и иметь log (n) поиск и вставки. Это прекрасно работает в общем случае, когда приложение работает, но когда приложение запускается впервые, мне нужно инициализировать TreeMap с несколькими миллионами длинных, которые я получаю в отсортированном порядке (по возрастанию).

Поскольку эти значения инициализации уже уже отсортированы, есть ли способ вставить их в TreeMap, не оплачивая log (n) стоимость вставки и повторной балансировки дерева?

1 Ответ

10 голосов
/ 12 марта 2011

Конечно!Метод TreeMap.putAll (и конструктор TreeMap, который принимает SortedMap) вызывает метод с именем buildFromSorted внутри, который описывается в документации как: «Алгоритм построения дерева линейного времени из отсортированных данных», поэтомуэто звучит так, как будто вы делаете то, что вам нужно.

Просто дайте методу putAll что-то, что реализует Map, но где итератор набора записей карты (Map.entrySet().iterator()) возвращает ваш список отсортированных значений.

...