В чем разница между HashMap и TreeMap? [дубликат]
этот вопрос уже есть ответ здесь:
Я начал изучать Java. Когда я использую хеш-за дерева?
8 ответов:
TreeMapпримерSortedMap, что означает, что порядок ключей может быть отсортирован, и при итерации по ключам вы можете ожидать, что они будут в порядке.
HashMapС другой стороны, не дает таких гарантий. Поэтому при итерации по ключам aHashMap, вы не можете быть уверены, каком порядке они будут.
HashMapбудет более эффективным в целом, так что используйте его всякий раз, когда вам все равно о порядке следования ключей.
HashMapреализуется хэш-таблицы, в то время какTreeMapосуществляетсяRed-Black tree. Главное отличиеHashMapиTreeMapна самом деле отражают основное различие междуHashиBinary Tree, то есть при итерации TreeMap guarantee может гарантировать ключевой порядок, который определяется либо методом compareTo() элемента, либо компаратором, установленным в конструкторе TreeMap.посмотри следующей схеме.
подведем итоги:
- HashMap: Lookup-структура массива, основанная на реализациях hashCode(), equals (), O(1) сложность выполнения для вставки и поиска, несортированный
- TreeMap: древовидная структура, основанная на реализации compareTo (), o(log(N)) сложность выполнения для вставки и поиска, сортировка
взято из: HashMap против TreeMap
использовать
HashMapв большинстве случаев, но использоватьTreeMapкогда вам нужно отсортировать ключ (когда вам нужно перебирать ключи).
Я буду говорить о HashMap и TreeMap реализация на Java:
HashMap -- реализовать базовый интерфейс карты
- реализовано массивом ведер, каждое ведро является LinkedList записей
- время выполнения основных операций: put (), average O (1), худший случай O(n), происходит при изменении размера таблицы; get (), remove (), average O(1)
- не синхронизировать, синхронизировать это:
Map m = Collections.synchronizedMap(new HashMap(...));- порядок итераций карты непредсказуем.
TreeMap -- реализовать навигационный интерфейс карты
- реализовано красно-черным деревом
- время выполнения основных операций: put (), get (), remove (), в худшем случае O(lgn)
- не синхронизировать, синхронизировать это:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));- обеспечить упорядоченную итерацию. higherKey (), lowerKey() можно использовать для получения преемника и предшественник данного ключа.
подводя итог, самая большая разница между HashMap и TreeMap заключается в том, что TreeMap реализует
NavigableMap<K,V>, которые обеспечивают функцию упорядоченной итерации. Кроме того, как HashMap, так и TreeMap являются членами Java Collection framework. Вы можете исследовать исходный код Java чтобы узнать больше об их реализации.
вы почти всегда использовать
HashMap, вы должны использоватьTreeMapЕсли вам нужно, чтобы ваши ключи были в определенном порядке.
HashMapиспользуется для быстрого поиска, в то время какTreeMapиспользуется для сортировки повторов на карте.
вместе с отсортированным ключом хранить друг друга разница с TreeMap, разработчик может дать (строка.CASE_INSENSITIVE_ORDER) со строковыми ключами, поэтому компаратор игнорирует регистр ключа при выполнении сравнения ключей при доступе к карте. Это не возможно, чтобы дать такую опцию с HashMap-это всегда чувствительные к регистру сравнения в HashMap.

Comments