Java HashMap  



HashMap Java Карта Java

Java HashMap хранит данные в виде ключ-значение пары, в которых ключевые данные должны быть уникальными. Мы можем получить доступ к значениям на основе соответствующих ключевых данных. HashMap присутствует в структуре Java Collection и является частью пакета java.util. Работает по принципу техники хеширования.

Иерархия Java HashMap  

Класс HashMap в Java расширяет Абстрактные класс Абстрактная карта и реализует Карта интерфейс, как показано ниже.

Java HashMapшпилька

Структура и принцип работы HashMap  

HashMap в Java работает по принципу Хеширования техника. В хешировании мы используем хеш-функции чтобы связать ключ и значение в HashMap. HashMap хранит пары ключ-значение в виде массив узлов, где каждая запись рассматривается как корзина. Ведро - это не что иное, как элемент в массиве. Каждый узел имеет 3 значения: Ключ, значение и ссылку на следующий узел. Когда более 1 узла используют один и тот же индекс, он представляет собой связанный список. Каждый узел сопоставляется с индексом в корзине, который вычисляется с помощью hashcode ().

HashMap в Javaшпилька

Производительность HashMap  

Производительность HashMap в Java зависит от следующих параметров:

  • Начальная емкость - указывает, сколько сегментов HashMap может хранить при инициализации. По умолчанию это 16 пары ключ-значение
  • Коэффициент загрузки - это процент емкости, которую необходимо увеличить. По умолчанию это 0.75
  • Порог - это произведение коэффициента нагрузки и мощности, значение по умолчанию - 12 (16 * 0.75)
  • Повторное хеширование - это процесс удвоения емкости после достижения порогового значения.
Смотрите также
TreeSet в Java

Объявление Java HashMap  

Чтобы использовать HashMap в Java, нам нужно импортировать java.util.HashMap упаковка. Синтаксис приведен ниже:

HashMap<KeyType,ValueType> map = new HashMap<>();

KeyType - Это тип ключевых данных. Например: строка или целое число.

ValueType - это тип данных значения. Например: строка или целое число

Возможности HashMap  

Ниже приведены возможности HashMap в Java:

  • Сохраняет значения, соответствующие каждому ключу
  • Содержит только уникальные ключи
  • Не разрешить дублирование ключи, но могут иметь повторяющиеся значения
  • Он не поддерживает какой-либо порядок, что означает, что порядок, в котором вставляются данные, не совпадает с порядком, в котором они извлекаются.
  • Это не синхронизировано

Конструкторы классов Java HashMap  

HashMap поддерживает 4 разных конструктора, как вы можете видеть в таблице ниже:

КонструкторОписание
HashMap ()Инициализирует HashMap по умолчанию
HashMap (Mapm)Инициализирует Hashmap с элементами Map m
HashMap (целая емкость)Инициализирует хэш-карту с указанным целочисленным значением емкости
HashMap (вместимость целого числа, коэффициент загрузки с плавающей запятой)Инициализирует хэш-карту с указанной емкостью и коэффициентом загрузки.

Методы HashMap  

Java HashMap поддерживает все методы, принадлежащие интерфейсу Map, а также методы, упомянутые в таблице ниже.

Способ доставкиОписаниеПараметр
пусто ясно ()Удаляет все сопоставления с этой карты, что означает, что карта будет пустой.
Клон объекта ()Возвращает мелкую копию этого экземпляра HashMap. Сами ключи и значения не клонируются
Логическое значение containsKey (ключ объекта)Возвращает истину, если есть значение сопоставления для указанного ключа.key - ключ, для которого нам нужно получить значение
Логическое значение containsValue (значение объекта)Возвращает истину, если есть сопоставление ключа для указанного значения.значение - значение, для которого отображается указанный ключ
Набор entrySet ()Возвращает заданный вид отображения карты.
Логическое равно (объект o)Возвращает истину, если объект имеет такое же отображение карты.o - объект для сравнения
Целочисленное получение (ключ объекта)Возвращает значение указанного ключа на карте. Он возвращает null, если нет сопоставленияkey - ключ, для которого необходимо получить отображение значений
Целочисленный getOrDefault (ключ объекта, целочисленное значение по умолчанию)Возвращает значение указанного ключа, если сопоставлено, иначе возвращает значение по умолчанию, если сопоставления нет.key - ключ, для которого мы значение должно быть возвращено
defaultvalue - значение по умолчанию, которое будет возвращено, когда нет сопоставления
int hashCode ()Возвращает значение хэш-кода карты.
Логическое значение isEmpty ()Возвращает true, если хэш-карта не содержит пар ключ-значение.
Установить keySet ()Возвращает установленный вид ключей, присутствующих на карте.
Целочисленный ввод (строковый ключ, значение int)Связывает ключ со значением. Если ключ уже присутствует, он заменяет старое значение новым значением.key - ключ для отображения
value - значение для указанного ключа
void putAll (карта m)Связывает все сопоставления ключей и значений m с текущей картойm - копии отображения, которые будут добавлены к текущей карте
Целое число putIfAbsent (строковый ключ, целочисленное значение)Связывает значение, если оно еще не сопоставлено с ключом, иначе возвращает текущее значениеkey - ключ для отображения
значение - значение, которое будет связано
Целочисленное удаление (ключ объекта)Удаляет сопоставление для указанного ключа на картеkey - ключ на карте, для которого нужно удалить отображение
Логическое удаление (ключ объекта, значение объекта)Удаляет запись указанного ключа, только если он сопоставлен с указанным значениемkey - ключ на карте
значение - значение, сопоставленное с ключом
Целочисленная замена (строковый ключ, целочисленное значение)Заменяет значение указанного ключа на значение, только если оно в настоящее время сопоставлено с некоторым значениемkey - ключ на карте
value - значение, которое нужно заменить
Логическая замена (строковый ключ, целое старое значение, целочисленное новое значение)Заменяет запись указанного ключа новым значением, только если он уже сопоставлен с указанным старым значениемkey - ключ на карте
oldvalue - старое значение сопоставлено с ключом
newvalue - новое значение, которое будет сопоставлено с ключом
размер int ()Возвращает размер карты.
Строка toString ()Возвращает строковое представление карты
Значения коллекции ()Возвращает представление коллекции значений, представленных на карте
Смотрите также
Java While Loop

Исключения HashMap  

It выбрасывает следующие исключения в Java:

  • ConcurrentModificationException
  • IllelgalMonitorStateException
  • Исключение нулевого указателя
  • InterruptedException
  • IllegalArgumentException

Добавление элементов в HashMap  

Как вы можете видеть в приведенном ниже примере, сначала мы создаем HashMap с именем «student» с ключом типа String и значение целого числа тип. Затем мы добавляем отдельные пары "ключ-значение", используя положил метод. В выводе можно заметить, что порядок, в котором извлекаются элементы, не совпадает с порядком, в котором они были вставлены.

Затем мы создаем вторую HashMap с именем stu, а затем добавляем 2 пары ключ-значение. Затем мы добавляем его к карте «ученик», используя положить все метод.

import java.util.HashMap;
public class HashMapAdd {

  public static void main(String[] args) {
    HashMap<String,Integer> student = new HashMap<>();
    student.put("Arthi", 100);
    student.put("Dev", 105);
    student.put("Banu",102);
    student.put("Rishi", 108);
    System.out.println("Elements in student map:");
    System.out.println(student);
    
    HashMap<String,Integer> stu = new HashMap<>();
    stu.put("Ravi",110);
    stu.put("Tejas", 112);
    System.out.println("Elements in stu map:");
    System.out.println(stu);
    
    student.putAll(stu);
    
    System.out.println("Elements in student map after invoking putAll method:");
    System.out.println(student);
  }

}
Elements in student map:
{Dev=105, Banu=102, Rishi=108, Arthi=100}
Elements in stu map:
{Ravi=110, Tejas=112}
Elements in student map after invoking putAll method:
{Dev=105, Ravi=110, Tejas=112, Banu=102, Rishi=108, Arthi=100}

Проверьте, содержит ли карта определенный ключ или значение  

МЫ ИСПОЛЬЗУЕМ containsKey метод, чтобы проверить, присутствует ли конкретный ключ на карте или нет. В этом случае Dev присутствует и, следовательно, возвращает true, а Ravi отсутствует и, следовательно, возвращает false.

Точно так же containsValue проверяет наличие определенного значения. Здесь 102 присутствует, но 110 нет и, следовательно, возвращает false.

import java.util.HashMap;
public class HashMapAdd {

  public static void main(String[] args) {
    HashMap<String,Integer> student = new HashMap<>();
    student.put("Arthi", 100);
    student.put("Dev", 105);
    student.put("Banu",102);
    student.put("Rishi", 108);
    System.out.println("Elements in student map:");
    System.out.println(student);
    
    System.out.println(student.containsKey("Dev"));
    System.out.println(student.containsKey("Ravi"));
    
    System.out.println(student.containsValue(102));
    System.out.println(student.containsValue(110));
  }

}
Elements in student map:
{Dev=105, Banu=102, Rishi=108, Arthi=100}
true
false
true
false

Удалить и заменить пару "ключ-значение"  

Здесь мы создаем хэш-карту в Java Integer и строка введите для хранения языков. Мы заменяем 2-е значение новыми данными и заменяем 3-е значение, если конкретная пара "ключ-значение" присутствует на карте, используя заменить () метод.

Смотрите также
Как проверить, является ли строка числом в Java

Затем мы удаляем третий элемент, используя ключ, и удаляем 3-й элемент, используя ключ-значение, используя Удалить() метод.

import java.util.HashMap;
public class RemoveHashMap {

  public static void main(String[] args) {
    HashMap<Integer,String> lang = new HashMap<>();
    lang.put(1, "Java");
    lang.put(2, "C");
    lang.putIfAbsent(3, "C++");
    System.out.println(lang);
    
    lang.replace(2, "PHP");
    System.out.println(lang);
    
    lang.replace(3, "C++", "JavaScript");
    System.out.println(lang);
    
    lang.remove(3);
    System.out.println(lang);
    
    lang.remove(1, "Java");		
    System.out.println(lang);
    
    
  }

}
{1=Java, 2=C, 3=C++}
{1=Java, 2=PHP, 3=C++}
{1=Java, 2=PHP, 3=JavaScript}
{1=Java, 2=PHP}
{2=PHP}

Пример четких и пустых методов  

HashMap в Java использует Чисто() метод для очистки сопоставления пар ключ-значение на карте и пусто проверяет, пуста ли карта. 1-й выход - ложь, поскольку отображение присутствует, а 2-й выход - истина, поскольку карта не имеет пар ключ-значение после вызова метода clear ().

import java.util.HashMap;
public class RemoveHashMap {

  public static void main(String[] args) {
    HashMap<Integer,String> lang = new HashMap<>();
    lang.put(1, "Java");
    lang.put(2, "C");
    
    System.out.println(lang.isEmpty());
    lang.clear();
    
    System.out.println(lang.isEmpty());
    
  }

}
false
true

Итерация по элементам HashMap с использованием entrySet  

Чтобы получить отдельные пары ключ-значение HashMap в Java, мы можем использовать entrySet метод HashMap вместе с Запись метод интерфейса Map с помощью для каждого цикла. Метод Entry интерфейса Map имеет встроенные методы, такие как geyKey () получить ключ и GetValue () чтобы получить соответствующее значение. Мы можем использовать размер() метод получения размера карты.

import java.util.HashMap;
import java.util.Map;
public class IterateHashMap {

  public static void main(String[] args) {
    HashMap<String,String> cityState = new HashMap<>();
    cityState.put("Bangalore", "Karnataka");
    cityState.put("Chennai", "TamilNadu");
    cityState.put("Madurai", "TamilNadu");
    cityState.put("Mumbai", "Maharashtra");
    
    System.out.println("Size of map is : " + cityState.size());
    
    for(Map.Entry<String,String> m : cityState.entrySet())
    {
      System.out.println(m.getKey() + " : " + m.getValue());
    }

  }

}
Size of map is : 4
Chennai : TamilNadu
Madurai : TamilNadu
Mumbai : Maharashtra
Bangalore : Karnataka

Перебирайте элементы с помощью keySet () и values ​​()  

Другой способ перебрать элементы Hashmap - использовать keySet () метод. Используя это, мы можем получить набор всех ключей по отдельности, как показано в приведенном ниже примере. Чтобы получить все значения по отдельности, мы можем использовать значения() метод и распечатайте их в цикле for.

Смотрите также
Сортировка массива по возрастанию частоты Решение Leetcode

Используя keySet, мы также можем распечатать пары ключ-значение с помощью повторение цикла for с помощью получить() для получения соответствующих значений.

import java.util.HashMap;
import java.util.Map;
public class IterateHashMap {

  public static void main(String[] args) {
    HashMap<String,String> cityState = new HashMap<>();
    cityState.put("Bangalore", "Karnataka");
    cityState.put("Chennai", "TamilNadu");
    cityState.put("Madurai", "TamilNadu");
    cityState.put("Mumbai", "Maharashtra");
    
    System.out.println("Printing only keys:");
    for(String s : cityState.keySet())
    {
      System.out.println(s);
    }
    System.out.println();
    System.out.println("Printing only values: ");
    for(String c : cityState.values())
    {
      System.out.println(c);
    }
    System.out.println();
    System.out.println("Printing both key-value pairs:");
    for(String v : cityState.keySet())
    {
      System.out.println("Key: " + v + " | value: " + cityState.get(v));
    }
  }

}
Printing only keys:
Chennai
Madurai
Mumbai
Bangalore

Printing only values: 
TamilNadu
TamilNadu
Maharashtra
Karnataka

Printing both key-value pairs:
Key: Chennai | value: TamilNadu
Key: Madurai | value: TamilNadu
Key: Mumbai | value: Maharashtra
Key: Bangalore | value: Karnataka

Заключение  

В этом руководстве вы узнали о HashMap и его различных методах, а также о различных примерах.

Справка

2