
Различия между HashMap, LinkedHashMap и TreeMap в Java
Вот основные различия между тремя упомянутыми классами, основанные на реализации, упорядочении, сортировке и поддержке нулевых ключей и значений.Реализация
И HashMap, и LinkedHashMap реализуют интерфейс Map, тогда как TreeMap реализует интерфейсы Map, NavigableMap и vSortedMap. LinkedHashMap реализован как корзина со списком с двойной связью (double-linked list bucket), HashMap реализован как хэш-таблица, а TreeMap реализован по древовидному принципу.Заказ и сортировка
HashMap не дает никаких гарантий относительно порядка итераций. Однако он может полностью меняться при добавлении новых элементов.
LinkedHashMap будет выполнять итерацию в том порядке, в котором записи были помещены в карту.
TreeMap выполняет итерацию в соответствии с “естественным порядком” ключей в соответствии с их методом compareTo() (или внешним Comparator). Также он реализует интерфейс SortedMap, который содержит методы, зависящие от порядка сортировки.
Нулевые ключи и значения
HashMaps и LinkedHashMap поддерживают нулевые значения, а также ключевые значения, в то время как TreeMap не поддерживают нулевые значения, поскольку они поддерживают естественные типы элементов. Для наглядного примера давайте создадим HashMap, LinkedHashMap и TreeMap.
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class HashMap_LinkedHashMap_TreeMap {
public static void main(String[] args) {
Map Treemapu = new TreeMap();
Treemapu.put("First", "Java");
Treemapu.put("Second", "Python");
System.out.println("TreeMap values are: \n" + Treemapu);
Map Hashimapu = new HashMap();
Hashimapu.put("First", "Java");
Hashimapu.put("Second", "Python");
System.out.println("HashMap Values are: \n" + Hashimapu);
Map LinkedHashiMapu = new LinkedHashMap();
LinkedHashiMapu.put("First", "Java");
LinkedHashiMapu.put("Second", "Python");
System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);
}
}
На выходе получим:
HashMap — это карта, основанная на хэшировании ключей. Он поддерживает операции O (1) get/put. Ключи должны иметь последовательные реализации hashCode() и equals().
LinkedHashMap очень похож на HashMap, но он имеет порядок, по которому элементы добавляются (или доступны), поэтому порядок итерации совпадает с порядком размещения (или порядком доступа, в зависимости от параметров конструкции).
TreeMap — это отображение по принципу дерева. Его операции put/get принимают время O (log n). Для этого требуется, чтобы элементы имели некоторый механизм сравнения, либо со сравнением, либо с компаратором. Порядок итераций определяется этим механизмом.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ