В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса Map. Java предоставляет две структуры данных для хэш-таблиц: одна - Hashtable, а следующая - HashMap. HashMap похож на Hashtable с двумя исключениями: методы HashMap несинхронизированы и позволяют вводить нулевые и нулевые значения в отличие от Hashtable. Hashtable синхронизируется и работает плохо в однопоточной среде. Из-за этого HashMap обычно предпочтительнее, если только вам не нужно заниматься потоками и синхронизацией. HashMap не является надежной коллекцией потоков и требует правильной обработки синхронизации.
В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса Map. Java предоставляет две структуры данных для хэш-таблиц: одна - Hashtable, а следующая - HashMap. HashMap похож на Hashtable с двумя исключениями: методы HashMap несинхронизированы и позволяют вводить нулевые и нулевые значения в отличие от Hashtable. Hashtable синхронизируется и работает плохо в однопоточной среде. Из-за этого HashMap обычно предпочтительнее, если только вам не нужно заниматься потоками и синхронизацией. HashMap не является надежной коллекцией потоков и требует правильной обработки синхронизации....
HashMap - это общий класс, используемый для хранения коллекции данных в виде пар ключей и значений и содержит значения на основе ключа. Эта реализация HashMap предоставляет всевозможные необязательные операции с картами и разрешает нулевые значения и нулевой ключ. Более того, он не поддерживает порядок.
HashMap
Объекты хранятся путем вызова метода put (ключ, значение) HashMap и извлекаются вызовом метода get (key).
Как работает hashmap Java?
HashMap работает по принципу Hashing. В простом случае хеширование - это способ присвоения уникального кода для любой переменной / объекта после применения любой формулы / алгоритма по его свойствам. Функция хэша должна возвращать один и тот же хэш-код каждый раз, когда функция применяется на одинаковых или равных объектах.
В HashMap имеется ряд «ведер», которые он использует для хранения пар ключ-значение. Ведро используется для хранения нескольких пар значений ключа. В хэш-карте ведро использует простой связанный список для хранения объектов. Каждое ведро имеет уникальный номер, это то, что идентифицирует ведро. Когда вы кладете (ключ, значение) в карту, хэш-файл будет смотреть на хэш-код ключа и хранить пару в ведре, идентификатором которого является хэш-код ключа. Например, хеш-код ключа равен 512, эта пара хранится в байтовом числе 512. Если есть какое-либо столкновение, HashMap использует LinkedList для хранения объекта. Важно отметить, что в одном ковше может храниться более одной пары ключ-значение.
Когда вы просматриваете значение в хэшмапе, давая ему ключ (get (ключ)), хэш-код определяет, какое ведро для хэш-карты нужно проверить. Сначала будет рассмотрен хэш-код ключа, который вы дали. Затем хешмап заглянет в соответствующее ведро, а затем сравним ключ, который вы дали с ключами всех пар в ковше, сравнивая их с equals(). Если в ковше имеется более одного объекта, то выполняется линейный поиск, чтобы найти, какой элемент в ковше равен требуемому элементу, используя метод equals().
Как добавить элементы в Hashmap?
import Java.util.*;
class TestClass
{
public static void main (String[] args) throws Java.lang.Exception
{
// Создание HashMap
HashMap days = new HashMap();
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
}
}
Как получить размер Java HashMap?
Метод size() используется для возврата числа сопоставлений значений ключа на этой карте.
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
System.out.println("Size of HashMap: "+ days.size());
Вывод:
Size of HashMap: 4
Как перебирать элементы в Hashmap?
Существует несколько способов просмотра элементов в Hashmap.
Используйте функцию entrySet() для итерации по карте и нужно получить доступ к значению и ключу:
HashMap days = new HashMap();
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Set> set = days.entrySet();
for (Map.Entry sg : set) {
System.out.println("Key :"+sg.getKey() + " Value :"+days.get(sg.getKey()));
}
Вывод:
Key :1 Value :Sunday
Key :2 Value :Monday
Key :3 Value :Tuesday
Key :4 Value :Wednesday
Set set = days.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
Удаление записей из HashMap
Метод remove() используется для удаления сопоставления для указанного ключа с этой карты, если он присутствует.
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
// удалить значение для ключа 3
days.remove(3);
System.out.println("Values after remove: "+ days);
Вывод:
Values after remove: {1=Sunday, 2=Monday, 4=Wednesday}
Удалить все значения из Java HashMap
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
System.out.println("Brefor remove: "+ days.size());
// удалить весь элемент из hashmap
days.clear();
System.out.println("After remove: "+ days.size());
Вывод:
Brefor remove: 4
After remove: 0
Как выполнить поиск ключа в HashMap?
Используя метод containsKey(), вы можете узнать о существовании ключа.
// Создание HashMap
HashMap days = new HashMap();
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Integer key=4;
if(days.containsKey(key)){
System.out.println("Key " + key + " found");
}else{
System.out.println("Key " + key+ " does not exist");
}
Вывод:
Key 4 found
Как получить ключ от значения в HashMap?
// Создание HashMap
HashMap days = new HashMap();
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Integer key= null;
String value="Tuesday";
for(Map.Entry entry: days.entrySet()){
if(value.equals(entry.getValue())){
key = (Integer)entry.getKey();
break; // нарушение, потому что его одна к одной карте
}
}
System.out.println("Found Key : "+ key +" value: " + value);
Вывод:
Found Key : 3 value: Tuesday
Следующая Java-программа иллюстрирует весь вышеупомянутый метод в одной программе
import Java.util.*;
class TestClass
{
public static void main (String[] args) throws Java.lang.Exception
{
// Как создать HashMap?
HashMap days = new HashMap ();
// Как добавить пары ключ / значение в HashMap?
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
days.put(5,"Thursday");
days.put(6,"Friday");
days.put(7,"Saturday");
// Как проходить через HashMap?
for(Map.Entry m:days.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
// Как удалить определенный элемент из HashMap
days.remove(3);
Set> set = days.entrySet();
for (Map.Entry sg : set) {
System.out.println("Key :"+sg.getKey() + " Value :"+days.get(sg.getKey()));
}
// Как найти ключ в HashMap?
Integer key=4;
if(days.containsKey(key)){
System.out.println("Key " + key + " found");
}else{
System.out.println("Key " + key+ " does not exist");
}
// Как получить ключ от его значения в HashMap
Integer iKey= null;
String value="Monday";
for(Map.Entry entry: days.entrySet()){
if(value.equals(entry.getValue())){
iKey = (Integer)entry.getKey();
break; // нарушение, потому что его одна к одной карте
}
}
System.out.println("Found Key : "+ iKey +" value: " + value);
// Как удалить весь элемент из HashMap?
days.clear();
// Как найти размер HashMap
System.out.println("After remove: "+ days.size());
}
}
Различия между HashMap и Hashtable
Hashtable синхронизируется, а HashMap не синхронизируется. Это делает HashMap лучше для не-потоковых приложений, поскольку несинхронизированные объекты обычно выполняют намного лучше, чем синхронизированные. Синхронизированный означает, что только один поток может изменить хэш-таблицу в один момент времени. В принципе, это означает, что любой поток перед выполнением обновления на хэш-таблице должен будет получить блокировку объекта, в то время как другие будут ждать освобождения блокировки.
Различия между HashMap и Hashtable
Hashtable синхронизируется, а HashMap не синхронизируется. Это делает HashMap лучше для не-потоковых приложений, поскольку несинхронизированные объекты обычно выполняют намного лучше, чем синхронизированные. Синхронизированный означает, что только один поток может изменить хэш-таблицу в один момент времени. В принципе, это означает, что любой поток перед выполнением обновления на хэш-таблице должен будет получить блокировку объекта, в то время как другие будут ждать освобождения блокировки....