Методи HashMap Java



HashMap Java Карта Java

Клас HashMap в Java зберігає дані у вигляді ключ-значення пари, де ключові дані повинні бути унікальними. Ми можемо отримати доступ до значень на основі відповідних ключових даних. HashMap присутній у фреймворку Java Collection і є частиною пакету java.util. Працює за принципом техніки Хеш.

Ієрархія HashMap Java

Клас HashMap в Java розширює абстрактний клас AbstractMap і реалізує карта інтерфейс, як показано нижче.

HashMap на Java

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

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

HashMap на Java

Продуктивність HashMap

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

  • Початкова ємність - Він вказує, скільки сегментів може зберігати HashMap при її ініціалізації. За замовчуванням це так 16 пари ключ-значення
  • Коефіцієнт навантаження - Це відсоток потужності, який потрібно збільшити. За замовчуванням це так 0.75
  • Поріг - це добуток коефіцієнта навантаження та потужності, значення якого за замовчуванням 12 (16 * 0.75)
  • Перепрофілювання - це процес подвоєння ємності після досягнення порогового значення.

Декларація 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)Ініціалізує хеш-карту елементами Map m
HashMap (внутрішня потужність)Ініціалізує хеш-карту із зазначеним цілим значенням ємності
HashMap (внутрішня ємність, коефіцієнт плаваючого навантаження)Ініціалізує хеш-карту із заданою ємністю та коефіцієнтом навантаження

Методи HashMap

Java HashMap підтримує всі методи, що належать до інтерфейсу Map, поряд із методами, згаданими в таблиці нижче

МетодописПараметр
void clear ()Видаляє всі відображення на цій карті, що означає, що карта буде порожньою
Клон об'єкта ()Повертає поверхневу копію цього екземпляра HashMap. Самі ключі та цінності не клонуються
Логічний containsKey (ключ об'єкта)Повертає true, якщо для вказаного ключа існує значення відображенняключ - ключ, для якого нам потрібно отримати значення
Логічне міститьValue (значення об'єкта)Повертає true, якщо є відображення ключа для вказаного значенняvalue - значення, для якого вказаний ключ зіставляється
Встановити entrySet ()Повертає заданий вигляд зіставлення карти
Логічне дорівнює (Об'єкт o)Повертає true, якщо об'єкт має однакове відображення картиo - об'єкт для порівняння
Ціле число (ключ об'єкта)Повертає значення вказаного ключа на карті. Повертає значення null, якщо немає відображенняключ - ключ, для якого слід отримати відображення значень
Ціле число getOrDefault (Ключ об’єкта, ціле значення за замовчуванням)Повертає значення зазначеного ключа, якщо відображено, інакше повертає значення за замовчуванням, якщо немає зіставленняключ - ключ, для якого ми цінуємо, повинен бути повернутий
defaultvalue - значення за замовчуванням, яке повертається, коли немає зіставлення
int hashCode ()Повертає значення хеш-коду карти
Логічний isEmpty ()Повертає true, якщо hashmap не містить пар ключ-значення
Встановити keySet ()Повертає заданий вигляд клавіш, присутніх на карті
Ціле число (ключ рядка, значення int)Пов'язує ключ зі значенням. Якщо ключ уже присутній, він замінює старе значення новим значеннямключ - ключ для відображення
value - значення для вказаного ключа
void putAll (Карта м)Пов'язує всі відображення ключа m із поточною картоюm - копії відображення, які потрібно додати до поточної карти
Ціле число putIfAbsent (Ключ рядка, ціле число)Пов’язує значення, якщо воно вже не зіставлене з ключем, повертає поточне значенняключ - ключ для відображення
value - значення, яке підлягає асоціації
Вилучення цілого числа (ключ об’єкта)Видаляє відображення для вказаного ключа на картіключ - ключ на карті, для якого відображення має бути видалено
Логічне видалення (ключ об'єкта, значення об'єкта)Видаляє запис вказаного ключа, лише якщо він зіставлений із зазначеним значеннямключ - ключ у карту
value - значення, зіставлене з ключем
Заміна цілого числа (рядок, ціле значення)Замінює значення зазначеного ключа на значення, лише якщо воно в даний час зіставлене з деяким значеннямключ - ключ у карту
value - значення, яке слід замінити
Логічна заміна (ключ рядка, ціле число oldvalue, ціле число newvalue)Замінює запис вказаного ключа новим значенням, лише якщо він уже зіставлений із вказаним старим значеннямключ - ключ на карті
oldvalue - старе значення, що відображається на ключ
newvalue - нове значення, яке буде зіставлено з ключем
розмір int ()Повертає розмір карти
Рядок toString ()Повертає рядкове представлення карти
Значення колекції ()Повертає подання колекції значень, присутніх на карті

Винятки HashMap

Він видає наведені нижче винятки в Java:

  • ConcurrentModificationException
  • IllelgalMonitorStateException
  • NullPointerException
  • Перерванеприйняття
  • IllegalArgumentException

Додавання елементів до HashMap

Як ви можете бачити в наведеному нижче прикладі, спочатку ми створюємо HashMap з іменем 'студент' з ключем типу String та значенням типу Integer. Потім ми додаємо окремі пари ключ-значення за допомогою put метод. У результатах ви можете помітити, що порядок отримання елементів не збігається з порядком, коли вони були вставлені.

Далі ми створюємо другу HashMap з назвою 'stu', а потім додаємо 2 пари ключ-значення. Потім це додаємо на карту студентів за допомогою putAll метод.

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}

Перевірте, чи містить карта певний ключ або значення

Ми використовуємо міститьКлюч метод перевірити, чи присутній на карті певний ключ чи ні. У цьому випадку Dev присутній і, отже, він повертає істину, а Раві відсутній і, отже, повертає false.

Так само, містить значення метод перевіряє наявність певного значення. Тут 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 і рядок типу для зберігання мов. Ми замінюємо друге значення новими даними, а третє - якщо конкретна пара ключ-значення присутня на карті за допомогою replace () метод.

Потім ми видаляємо 3-й елемент за допомогою ключа, а 1-й елемент використовуємо ключ-значення за допомогою видалити () метод.

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 використовує ясно () метод очищення відображення пар ключ-значення на карті та пусто метод перевіряє, чи карта порожня. Перший висновок хибний, оскільки відображення присутній, а другий вихідний результат є істинним, оскільки карта не має пар ключ-значення після виклику методу 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 за допомогою a для кожного циклу. Метод 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 () метод. Використовуючи це, ми можемо отримати набір усіх клавіш окремо, як показано на прикладі нижче. Щоб отримати всі значення окремо, ми можемо використовувати values ​​() метод і роздрукуйте їх у циклі for.

Використовуючи keySet, ми також можемо надрукувати пари ключ-значення, перебираючи цикл for за допомогою get () метод отримати відповідні значення.

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 та різні його методи разом із різними прикладами.

Посилання