Java HashMap / Hashtable, LinkedHashMap и TreeMap
Вступление
Основная идея карты заключается в том, что она поддерживает ассоциации ключ-значение (пары), поэтому вы можете искать значение с помощью ключа. В этом руководстве мы обсудим Java HashMap / Hashtable, LinkedHashMap и TreeMap.
HashMap / Hashtable
HashMap имеет реализацию, основанную на хеш-таблице. (Используйте этот класс вместо Hashtable, который является унаследованным классом). HashMap дает вам несортированную, неупорядоченную карту. Если вам нужна карта, а вам не нужен порядок (когда вы ее просматриваете), то HashMap - правильный выбор. Ключи HashMap похожи на Set, что означает, что дубликаты не разрешены и неупорядочены, в то время как значения могут быть любым объектом, даже нулевым или дублирующимся. HashMap очень похож на различие в Hashtable, только в Hashtable все методы синхронизированы для обеспечения безопасности потоков, в то время как HashMap имеет несинхронизированные методы для повышения производительности.
Мы можем визуализировать HashMap, как показано на диаграмме ниже, где у нас есть ключи в соответствии с хеш-кодом и соответствующими значениями.
HashMap обеспечивает постоянную производительность для вставки и размещения пар. Производительность можно регулировать с помощью конструкторов, которые позволяют вам установить емкость и коэффициент загрузки хеш-таблицы.
Конструкторы HashMap
HashMap ()
Конструктор HashMap по умолчанию (с емкостью по умолчанию 16 и коэффициентом загрузки 0,75)
HashMap (Map <? Extends KeyObject,? Extends ValueObject> m)
Это используется для создания HashMap на основе существующей реализации карты m.
HashMap (внутренняя емкость)
Это используется для инициализации HashMap с емкостью и коэффициентом загрузки по умолчанию.
HashMap (внутренняя емкость, float loadFactor)
Это используется для инициализации HashMap с емкостью и пользовательским коэффициентом загрузки.
Основные операции HashMap (put, get, containsKey, containsValue, size и Empty) ведут себя точно так же, как их аналоги в Hashtable. HashMap имеет переопределенный метод toString () для простой печати пар ключ-значение. Следующая программа иллюстрирует HashMap. Он сопоставляет имена с зарплатой. Обратите внимание на то, как сет-вид получается и используется.
Java-код: перейти к редактору
import java.util.*;
public class EmployeeSalaryStoring {
public static void main(String[] args) {
//Below Line will create HashMap with initial size 10 and 0.5 load factor
Map<String, Integer>empSal = new HashMap<String, Integer>(10, 0.5f);
//Adding employee name and salary to map
empSal.put("Ramesh", 10000);
empSal.put("Suresh", 20000);
empSal.put("Mahesh", 30000);
empSal.put("Naresh", 1000);
empSal.put("Nainesh", 15000);
empSal.put("Rakesh", 10000); // Duplicate Value also allowed but Keys should not be duplicate
empSal.put("Nilesh", null); //Value can be null as well
System.out.println("Original Map: "+ empSal);// Printing full Map
//Adding new employee the Map to see ordering of object changes
empSal.put("Rohit", 23000);
//Removing one key-value pair
empSal.remove("Nilesh");
System.out.println("Updated Map: "+empSal);// Printing full Map
//Printing all Keys
System.out.println(empSal.keySet());
//Printing all Values
System.out.println(empSal.values());
}
}
Выход:
Java LinkedHashMap
LinkedHashMap расширяет HashMap. Он поддерживает связанный список записей на карте в том порядке, в котором они были вставлены. Это позволяет итерацию порядка вставки по карте. Таким образом, при выполнении итераций в представлении коллекции LinkedHashMap элементы будут возвращены в том порядке, в котором они были вставлены. Также, если снова вставить ключ в LinkedHashMap, исходные заказы сохраняются. Это позволяет итерацию порядка вставки по карте. То есть при итерации LinkedHashMap элементы будут возвращены в том порядке, в котором они были вставлены. Вы также можете создать LinkedHashMap, который возвращает его элементы в том порядке, в котором они были доступны в последний раз.
Конструкторы
LinkedHashMap ()
Этот конструктор создает пустой экземпляр LinkedHashMap, упорядоченный по вставке, с начальной емкостью по умолчанию (16) и коэффициентом загрузки (0,75).
LinkedHashMap (внутренняя емкость)
Этот конструктор создает пустой LinkedHashMap с указанной начальной емкостью.
LinkedHashMap (intacity, float fillRatio)
Этот конструктор создает пустой LinkedHashMap с указанными начальной емкостью и коэффициентом загрузки.
LinkedHashMap (Карта m)
Этот конструктор создает упорядоченный HashMap со вставкой с тем же отображением, что и указанная карта.
LinkedHashMap (intacity, float fillRatio, логический порядок)
Этот конструктор создает пустой экземпляр LinkedHashMap с указанной начальной емкостью, коэффициентом загрузки и режимом упорядочения.
Важные методы, поддерживаемые LinkedHashMap
Класс очистить ()
Удаляет все сопоставления с карты.
containsValue (значение объекта)>
Возвращает true, если эта карта отображает один или несколько ключей на указанное значение.
get (ключ объекта)
Возвращает значение, которому сопоставлен указанный ключ, или значение NULL, если эта карта не содержит сопоставления для ключа.
removeEldestEntry (Map.Entry eldest)
Возвращает true, если эта карта должна удалить свою старшую запись.
Программа Java демонстрирует использование LinkedHashMap:
Java-код:
package linkedhashmap;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapDemo {
public static void main (String args[]){
//Here Insertion order maintains
Map<Integer, String>lmap = new LinkedHashMap<Integer, String>();
lmap.put(12, "Mahesh");
lmap.put(5, "Naresh");
lmap.put(23, "Suresh");
lmap.put(9, "Sachin");
System.out.println("LinkedHashMap before modification" + lmap);
System.out.println("Is Employee ID 12 exists: " +lmap.containsKey(12));
System.out.println("Is Employee name Amit Exists: "+lmap.containsValue("Amit"));
System.out.println("Total number of employees: "+ lmap.size());
System.out.println("Removing Employee with ID 5: " + lmap.remove(5));
System.out.println("Removing Employee with ID 3 (which does not exist): " + lmap.remove(3));
System.out.println("LinkedHashMap After modification" + lmap);
}
}
Выход:
Java TreeMap
TreeMap - это карта, которая поддерживает свои записи в порядке возрастания, отсортированные в соответствии с естественным упорядочением ключей или в соответствии с компаратором, предоставленным во время аргумента конструктора TreeMap. Класс TreeMap эффективен для обхода ключей в отсортированном порядке. , Ключи могут быть отсортированы с использованием интерфейса Comparable или интерфейса Comparator. SortedMap - это подинтерфейс Map, который гарантирует, что записи на карте отсортированы. Кроме того, он предоставляет методы firstKey () и lastKey () для возврата первого и последнего ключей на карте, а также headMap (toKey) и tailMap (fromKey) для возврата части карты, ключи которой меньше toKey и больше чем или равно fromKey.
Конструкторы TreeMap
TreeMap ()
Конструктор TreeMap по умолчанию
TreeMap (Карта м)
Это используется для создания TreeMap на основе существующей реализации карты m.
TreeMap (SortedMap m)
Это используется для создания TreeMap на основе существующей реализации карты m.
TreeMap (Comparator ()
Это используется для создания TreeMap с упорядочением на основе выходных данных компаратора.
Программа Java, которая объясняет некоторые важные методы древовидной карты.
Java-код: перейти к редактору
import java.util.Map;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
//Creating Map of Fruit and price of it
Map<String, Integer> tMap = new TreeMap<String, Integer>();
tMap.put("Orange", 12);
tMap.put("Apple", 25);
tMap.put("Mango", 45);
tMap.put("Chicku", 10);
tMap.put("Banana", 4);
tMap.put("Strawberry", 90);
System.out.println("Sorted Fruit by Name: "+tMap);
tMap.put("Pinapple", 87);
tMap.remove("Chicku");
System.out.println("Updated Sorted Fruit by Name: "+tMap);
}
}
Выход:
Java-код: перейти к редактору
import java.util.*;
public class CountOccurrenceOfWords {
public static void main(String[] args) {
// Set text in a string
String text ="Good morning class. Have a good learning class. Enjoy learning with fun!";
// Create a TreeMap to hold words as key and count as value
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
String[] words = text.split(" "); //Splitting sentance based on String
for (int i = 0; i < words.length; i++) {
String key = words[i].toLowerCase();
if (key.length() > 0) {
if (map.get(key) == null) {
map.put(key, 1);
} else {
int value = map.get(key).intValue();
value++;
map.put(key, value);
}
}
}
System.out.println(map);
}
}
Выход:
Резюме:
- Карта - это коллекция объектов пары-значения (связанных).
- HashMap допускает один нулевой ключ, но Hashtable не допускает никаких нулевых ключей.
- Значения в HashMap могут быть нулевыми или повторяющимися, но ключи должны быть уникальными.
- Порядок итераций не является постоянным в случае HashMap.
- Когда нам нужно поддерживать порядок вставки во время итерации, мы должны использовать LinkedHashMap.
- LinkedHashMap предоставляет все методы, аналогичные HashMap.
- LinkedHashMap не является поточно-ориентированным.
- TreeMap имеет более высокую скорость итерации по сравнению с другой реализацией карты.
- TreeMap - это отсортированная коллекция заказов, как естественная, так и индивидуальная, согласно компаратору.
Редактор кода Java:
Предыдущий: Java HashSet, связанный
Далее: Java Utility Class
Новый контент: Composer: менеджер зависимостей для PHP , R программирования