logo

HashMap в Java

У Java, HashMap є частиною колекції Java з Java 1.2. Цей клас знаходиться в java.util пакет. Він забезпечує базову реалізацію інтерфейсу Map Java. HashMap у Java зберігає дані в парах (ключ, значення), і ви можете отримати до них доступ за індексом іншого типу (наприклад, ціле число). Один об’єкт використовується як ключ (індекс) до іншого об’єкта (значення). Якщо ви спробуєте вставити дублікат ключа в HashMap, він замінить елемент відповідного ключа.

Що таке HashMap?

Java HashMap схожий на HashTable , але він не синхронізований. Це також дозволяє зберігати нульові ключі, але має бути лише один об’єкт нульового ключа, і може бути будь-яка кількість нульових значень. Цей клас не дає гарантій щодо порядку карти. Щоб використовувати цей клас і його методи, вам потрібно імпортувати java.util.HashMap пакет або його суперклас.

Зміст



Приклади Java HashMap

Нижче наведено реалізацію прикладу Java HashMap:

Java




// Java program to illustrate HashMap class> // of java.util package> // Importing HashMap class> import> java.util.HashMap;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Create an empty hash map by declaring object> >// of string and integer type> >HashMap map =>new> HashMap();> >// Adding elements to the Map> >// using standard put() method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Print size and content of the Map> >System.out.println(>'Size of map is:- '> >+ map.size());> >// Printing elements in object of Map> >System.out.println(map);> >// Checking if a key is present and if> >// present, print value by passing> >// random element> >if> (map.containsKey(>'vishal'>)) {> >// Mapping> >Integer a = map.get(>'vishal'>);> >// Printing value for the corresponding key> >System.out.println(>'value for key'> >+>' 'vishal' is:- '> + a);> >}> >}> }>

>

>

Вихід

Size of map is:- 3 {vaibhav=20, vishal=10, sachin=30} value for key 'vishal' is:- 10>

HashMap Декларація

public class HashMap extends AbstractMap implements Map, Cloneable, Serializable>

Параметри:

Він приймає два параметри, а саме:

  • Тип ключів, які підтримує ця карта
  • Тип зіставлених значень

Примітка: К eys і value не можуть бути простими типами даних. Ключ у Hashmap дійсний, якщо він реалізований метод hashCode() і equals(). , він також має бути незмінним (незмінний користувацький об’єкт), щоб хеш-код і рівність залишалися постійними. Значенням у hashmap може бути будь-який клас оболонки, користувацькі об’єкти, масиви, будь-який тип посилання або навіть null.

Наприклад : Hashmap може мати масив як значення, але не як ключ.

HashMap в Java реалізує Серіалізований , Можливість клонування , Карта Java HashMap розширюється Абстрактна карта клас. Прямі підкласи є LinkedHashMap і PrinterStateReasons .

Ієрархія Java HashMap

Ієрархія HashMap в Java

Характеристики Java HashMap

HashMap — це структура даних, яка використовується для зберігання та отримання значень на основі ключів. Деякі з ключових характеристик хеш-карти включають:

  • Швидкий час доступу : HashMaps забезпечує постійний доступ до елементів у часі, що означає, що пошук і вставка елементів дуже швидкі, зазвичай O(1) за часом.
  • Використовує функцію хешування : HashMaps використовує хеш-функцію для зіставлення ключів з індексами в масиві. Це дозволяє швидко шукати значення на основі ключів.
  • Зберігає пари ключ-значення: Кожен елемент у HashMap складається з пари ключ-значення. Ключ використовується для пошуку відповідного значення.
  • Підтримує нульові ключі та значення : HashMaps допускає нульові значення та ключі. Це означає, що нульовий ключ можна використовувати для зберігання значення, а нульове значення можна асоціювати з ключем.
  • Не замовляється: HashMaps не впорядковані, що означає, що порядок додавання елементів на карту не зберігається. Однак LinkedHashMap є різновидом HashMap, який зберігає порядок вставки.
  • Дозволяє дублювати : HashMaps допускає повторювані значення, але не повторювані ключі. Якщо додано дублікат ключа, попереднє значення, пов’язане з ключем, буде перезаписано.
  • Потік небезпечний : HashMaps небезпечні для потоків, а це означає, що якщо кілька потоків отримують доступ до однієї хеш-карти одночасно, це може призвести до неузгодженості даних. Якщо потрібна безпека потоку, можна використовувати ConcurrentHashMap.
  • Місткість і коефіцієнт навантаження : HashMaps мають ємність, тобто кількість елементів, які вони можуть утримувати, і коефіцієнт завантаження, який є мірою того, наскільки заповненою може бути хеш-карта до того, як її розмір буде змінено.

Створення HashMap в Java

Давайте зрозуміємо, як ми можемо створити HashMap в Java на прикладі, наведеному нижче:

Java


мінімаксний алгоритм



// Java Program to Create> // HashMap in Java> import> java.util.HashMap;> // Driver Class> public> class> ExampleHashMap {> >// main function> >public> static> void> main(String[] args) {> > >// Create a HashMap> >HashMap hashMap =>new> HashMap();> > >// Add elements to the HashMap> >hashMap.put(>'John'>,>25>);> >hashMap.put(>'Jane'>,>30>);> >hashMap.put(>'Jim'>,>35>);> > >// Access elements in the HashMap> >System.out.println(hashMap.get(>'John'>));> >// Output: 25> > >// Remove an element from the HashMap> >hashMap.remove(>'Jim'>);> > >// Check if an element is present in the HashMap> >System.out.println(hashMap.containsKey(>'Jim'>));> >// Output: false> > >// Get the size of the HashMap> >System.out.println(hashMap.size());> >// Output: 2> >}> }>

>

>

Вихід

25 false 2>

Конструктори Java HashMap

HashMap надає 4 конструктори, і модифікатор доступу для кожного є загальнодоступним, які перераховані наступним чином:

  1. HashMap()
  2. HashMap(int initialCapacity)
  3. HashMap(int initialCapacity, float loadFactor)
  4. HashMap (карта карти)

Тепер обговорюємо вищезазначені конструктори один за іншим разом із реалізацією їх за допомогою чистих програм Java.

1. HashMap()

Це конструктор за замовчуванням, який створює екземпляр HashMap з початковою ємністю 16 і коефіцієнтом завантаження 0,75.

Синтаксис:

HashMap hm = new HashMap();>

приклад

Java




// Java program to Demonstrate the HashMap() constructor> // Importing basic required classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap();> >// Adding elements using put method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display mapping of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display mapping of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }>

>

>

Вихід

Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}>

2. HashMap(int initialCapacity)

Він створює екземпляр HashMap з a задана початкова потужність і коефіцієнт навантаження 0,75.

Синтаксис:

HashMap hm = new HashMap(int initialCapacity);>

приклад

Java


1 мільярд до мільйона



// Java program to Demonstrate> // HashMap(int initialCapacity) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> AddElementsToHashMap {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap(>10>);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>2>);> >// Adding elements to object of HashMap> >// using put method> >// HashMap 1> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// HashMap 2> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Printing elements of HashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Printing elements of HashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }>

>

>

Вихід

Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}>

3. HashMap(int initialCapacity, float loadFactor)

Він створює екземпляр HashMap із заданою початковою ємністю та вказаним коефіцієнтом завантаження.

Синтаксис:

HashMap hm = new HashMap(int initialCapacity, float loadFactor);>

приклад

Java




// Java program to Demonstrate> // HashMap(int initialCapacity,float loadFactor) Constructor> // Importing basic classes> import> java.io.*;> import> java.util.*;> // Main class> // To add elements to HashMap> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// No need to mention the generic type twice> >HashMap hm1> >=>new> HashMap(>5>,>0>.75f);> >// Initialization of a HashMap using Generics> >HashMap hm2> >=>new> HashMap(>3>,>0>.5f);> >// Add Elements using put() method> >// Custom input elements> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >hm2.put(>4>,>'four'>);> >hm2.put(>5>,>'five'>);> >hm2.put(>6>,>'six'>);> >// Print and display elements in object of hashMap 1> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >// Print and display elements in object of hashMap 2> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }>

>

>

Вихід

Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {4=four, 5=five, 6=six}>

4. HashMap (карта карти)

Він створює екземпляр HashMap з тими ж відображеннями, що й указана карта.

HashMap hm = new HashMap(карта карти);

Java




// Java program to demonstrate the> // HashMap(Map map) Constructor> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Map hm1 =>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'one'>);> >hm1.put(>2>,>'two'>);> >hm1.put(>3>,>'three'>);> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap(hm1);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> > >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }>

>

>

Вихід

Mappings of HashMap hm1 are : {1=one, 2=two, 3=three} Mapping of HashMap hm2 are : {1=one, 2=two, 3=three}>

Виконання різних операцій на HashMap

1. Додавання елементів у HashMap на Java

Щоб додати елемент до карти, ми можемо використати поставити() метод. Однак порядок вставки не зберігається в Hashmap. Внутрішньо для кожного елемента генерується окремий хеш, і елементи індексуються на основі цього хешу, щоб зробити його більш ефективним.

Java




// Java program to add elements> // to the HashMap> import> java.io.*;> import> java.util.*;> class> AddElementsToHashMap {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >HashMap hm1 =>new> HashMap();> >// Initialization of a HashMap> >// using Generics> >HashMap hm2> >=>new> HashMap();> >// Add Elements using put method> >hm1.put(>1>,>'Geeks'>);> >hm1.put(>2>,>'For'>);> >hm1.put(>3>,>'Geeks'>);> >hm2.put(>1>,>'Geeks'>);> >hm2.put(>2>,>'For'>);> >hm2.put(>3>,>'Geeks'>);> >System.out.println(>'Mappings of HashMap hm1 are : '> >+ hm1);> >System.out.println(>'Mapping of HashMap hm2 are : '> >+ hm2);> >}> }>

>

>

Вихід

Mappings of HashMap hm1 are : {1=Geeks, 2=For, 3=Geeks} Mapping of HashMap hm2 are : {1=Geeks, 2=For, 3=Geeks}>

2. Зміна елементів у HashMap у Java

Після додавання елементів, якщо ми хочемо змінити елемент, це можна зробити, знову додавши елемент за допомогою поставити() метод. Оскільки елементи на карті індексуються за допомогою ключів, значення ключа можна змінити, просто вставивши оновлене значення для ключа, для якого ми хочемо змінити.

Java


java boolean



// Java program to change> // elements of HashMap> import> java.io.*;> import> java.util.*;> class> ChangeElementsOfHashMap {> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >HashMap hm> >=>new> HashMap();> >// Change Value using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'Geeks'>);> >hm.put(>3>,>'Geeks'>);> >System.out.println(>'Initial Map '> + hm);> >hm.put(>2>,>'For'>);> >System.out.println(>'Updated Map '> + hm);> >}> }>

>

>

Вихід

Initial Map {1=Geeks, 2=Geeks, 3=Geeks} Updated Map {1=Geeks, 2=For, 3=Geeks}>

3. Видалення елемента з Java HashMap

Щоб видалити елемент із карти, ми можемо використати видалити() метод. Цей метод приймає значення ключа та видаляє відображення для ключа з цієї карти, якщо він присутній у карті.

Java




// Java program to remove> // elements from HashMap> import> java.io.*;> import> java.util.*;> class> RemoveElementsOfHashMap{> >public> static> void> main(String args[])> >{> >// Initialization of a HashMap> >Map hm> >=>new> HashMap();> >// Add elements using put method> >hm.put(>1>,>'Geeks'>);> >hm.put(>2>,>'For'>);> >hm.put(>3>,>'Geeks'>);> >hm.put(>4>,>'For'>);> >// Initial HashMap> >System.out.println(>'Mappings of HashMap are : '> >+ hm);> >// remove element with a key> >// using remove method> >hm.remove(>4>);> >// Final HashMap> >System.out.println(>'Mappings after removal are : '> >+ hm);> >}> }>

>

>

Вихід

Mappings of HashMap are : {1=Geeks, 2=For, 3=Geeks, 4=For} Mappings after removal are : {1=Geeks, 2=For, 3=Geeks}>

4. Обхід Java HashMap

Ми можемо використовувати інтерфейс Iterator для проходження будь-якої структури Collection Framework. Оскільки ітератори працюють з одним типом даних, ми використовуємо Entry для розділення двох окремих типів у сумісний формат. Потім за допомогою методу next() ми друкуємо записи HashMap.

Java




// Java program to traversal a> // Java.util.HashMap> import> java.util.HashMap;> import> java.util.Map;> public> class> TraversalTheHashMap {> >public> static> void> main(String[] args)> >{> >// initialize a HashMap> >HashMap map =>new> HashMap();> >// Add elements using put method> >map.put(>'vishal'>,>10>);> >map.put(>'sachin'>,>30>);> >map.put(>'vaibhav'>,>20>);> >// Iterate the map using> >// for-each loop> >for> (Map.Entry e : map.entrySet())> >System.out.println(>'Key: '> + e.getKey()> >+>' Value: '> + e.getValue());> >}> }>

>

>

Вихід

Key: vaibhav Value: 20 Key: vishal Value: 10 Key: sachin Value: 30>

Складність HashMap в Java

HashMap забезпечує постійну складність у часі для базових операцій, get і put, якщо хеш-функція правильно написана і вона належним чином розподіляє елементи між сегментами. Ітерація через HashMap залежить від ємності HashMap і кількості пар ключ-значення. В основному, це прямо пропорційно ємності + розміру. Ємність — це кількість сегментів у HashMap. Тому спочатку зберігати велику кількість сегментів у HashMap не дуже гарна ідея.

np padding

методи

Часова складність

Космічна складність

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

О(1)

O(N)

Видалення елемента з HashMap

О(1)

O(N)

Витяг елемента з Java

О(1)

O(N)

Важливі функції HashMap

Щоб отримати доступ до значення, необхідно знати його ключ. HashMap відомий як HashMap, оскільки використовує техніку під назвою хешування. Хешування це техніка перетворення великого рядка в маленький рядок, який представляє той самий рядок. Коротше значення сприяє індексуванню та швидшому пошуку. HashSet також внутрішньо використовує HashMap.
Кілька важливих функцій HashMap:

  • HashMap є частиною пакета java.util.
  • HashMap розширює абстрактний клас AbstractMap, який також забезпечує неповну реалізацію інтерфейсу Map.
  • Він також реалізує a Можливість клонування і Серіалізований інтерфейси. K і V у наведеному вище визначенні представляють ключ і значення відповідно.
  • HashMap не допускає дублікатів ключів, але допускає повторювані значення. Це означає, що один ключ не може містити більше ніж 1 значення, але більше ніж 1 ключ можуть містити одне значення.
  • HashMap також допускає нульовий ключ, але лише один раз і кілька нульових значень.
  • Цей клас не дає гарантій щодо порядку карти; зокрема, це не гарантує, що порядок залишатиметься незмінним протягом тривалого часу. Він приблизно схожий на HashTable, але несинхронізований.

Внутрішня структура HashMap

Всередині HashMap містить масив Node, а вузол представлений як клас, який містить 4 поля:

  1. int хеш
  2. K ключ
  3. V значення
  4. Вузол наступний

Можна побачити, що вузол містить посилання на власний об’єкт. Отже, це пов’язаний список.

HashMap:

Java HashMap

вузол:

node_hash_map

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

Продуктивність HashMap залежить від 2 параметрів, які називаються наступним чином:

  1. Початкова потужність
  2. Коефіцієнт навантаження

1. Початкова потужність – Це ємність HashMap на момент його створення (це кількість сегментів, які може містити HashMap під час створення екземпляра HashMap). У java спочатку 2^4=16, тобто він може містити 16 пар ключ-значення.

2. Коефіцієнт навантаження – Це відсоткове значення ємності, після якого ємність Hashmap має бути збільшена (це відсоткове заповнення відер, після якого відбувається повторне хешування). У java за замовчуванням дорівнює 0,75f, тобто повторне хешування відбувається після заповнення 75% ємності.

3. Поріг – Це добуток коефіцієнта навантаження та початкової потужності. У java за замовчуванням це (16 * 0,75 = 12). Тобто повторне хешування відбувається після вставки 12 пар ключ-значення в HashMap.

як визначити розмір монітора

4. Переспівування – Це процес подвоєння ємності HashMap після досягнення нею порогового значення. У java HashMap продовжує повторне хешування (за замовчуванням) у такій послідовності – 2^4, 2^5, 2^6, 2^7, …. так далі.

Якщо початкова ємність зберігається на вищому рівні, повторне хешування ніколи не буде виконано. Але підтримання його вище збільшує тривалість ітерації. Тому його слід вибирати дуже розумно, щоб підвищити продуктивність. Для встановлення початкової потужності слід враховувати очікувану кількість значень. Найбільш прийнятним значенням коефіцієнта навантаження є 0,75, що забезпечує хороше співвідношення між витратами часу та місця. Значення коефіцієнта навантаження коливається від 0 до 1.

Примітка: Починаючи з Java 8, Java почала використовувати Self Balancing BST замість пов’язаного списку для з’єднання. Перевага самобалансування bst полягає в тому, що ми отримуємо найгірший випадок (коли кожен ключ відповідає одному і тому ж слоту), час пошуку становить O(Log n).

Синхронізована HashMap

Як сказано, HashMap несинхронізований, тобто кілька потоків можуть отримати до нього доступ одночасно. Якщо кілька потоків отримують доступ до цього класу одночасно і принаймні один потік маніпулює ним структурно, тоді необхідно зробити його зовнішню синхронізацію. Це робиться шляхом синхронізації деякого об’єкта, який інкапсулює карту. Якщо такого об’єкта не існує, його можна обернути навколо Collections.synchronizedMap(), щоб зробити HashMap синхронізованим і уникнути випадкового несинхронізованого доступу. Як у наступному прикладі:

Map m = Collections.synchronizedMap(new HashMap(...));>

Тепер Карта m синхронізована. Ітератори цього класу є стійкими до збоїв, якщо будь-яка модифікація структури виконується після створення ітератора будь-яким способом, крім методу видалення ітератора. У разі невдачі ітератора він викличе ConcurrentModificationException.

Застосування HashMap:

HashMap — це в основному реалізація хешування. Це корисно, коли нам потрібна ефективна реалізація операцій пошуку, вставки та видалення. Будь ласка, зверніться до застосування хешування для деталей.

Методи в HashMapassociate

  • К – Тип ключів на карті.
  • IN – Тип значень, відображених на карті.

метод

опис

очистити() Видаляє всі зіставлення з цієї карти.
клонувати() Повертає поверхневу копію цього екземпляра HashMap: самі ключі та значення не клонуються.
compute(клавіша K, BiFunction ? супер V,? розширює V> remappingFunction) Намагається обчислити відображення для вказаного ключа та його поточного відображеного значення (або значення null, якщо поточного відображення немає).
computeIfAbsent(клавіша K, функція супер К,? розширює V> mappingFunction) Якщо вказаний ключ ще не пов’язано зі значенням (або зіставлено з null), намагається обчислити його значення за допомогою заданої функції відображення та вводить його в цю карту, якщо він не null.
computeIfPresent(клавіша K, BiFunction ? супер V,? розширює V> remappingFunction) Якщо значення для вказаного ключа присутнє та відмінне від null, намагається обчислити нове зіставлення з урахуванням ключа та його поточного зіставленого значення.
містить ключ (ключ об'єкта) Повертає true, якщо ця карта містить відображення для вказаного ключа.
containsValue(значення об'єкта) Повертає true, якщо ця карта зіставляє один або кілька ключів із вказаним значенням.
entrySet() Повертає представлення набору відображень, які містяться на цій карті.
отримати (ключ об'єкта) Повертає значення, на яке зіставляється вказаний ключ, або null, якщо ця карта не містить зіставлення для ключа.
пусто() Повертає true, якщо ця карта не містить зіставлень ключ-значення.
keySet() Повертає набір перегляду ключів, які містяться на цій карті.
merge(клавіша K, значення V, BiFunction ? супер V,? розширює V> remappingFunction) Якщо вказаний ключ ще не пов’язано зі значенням або пов’язано з null, пов’яжіть його з заданим ненульовим значенням.
поставити (ключ K, значення V) Пов’язує вказане значення з указаним ключем у цій карті.
putAll(Map m) Копіює всі зіставлення з указаної карти на цю карту.
видалити (ключ об'єкта) Видаляє зіставлення для вказаного ключа з цієї карти, якщо воно є.
розмір() Повертає кількість зіставлень ключ-значення в цій карті.
значення() Повертає перегляд колекції значень, які містяться на цій карті.

Методи, успадковані від класу java.util.AbstractMap

МЕТОД

ОПИС

дорівнює()

Порівнює вказаний об’єкт із цією картою на рівність.

hashCode()

Повертає значення хеш-коду для цієї карти.

toString()

Повертає рядкове представлення цієї карти.

Методи, успадковані від інтерфейсу java.util.Map

МЕТОД

ОПИС

дорівнює() Порівнює вказаний об’єкт із цією картою на рівність.

forEach(дія BiConsumer)

Виконує вказану дію для кожного запису в цій карті, доки всі записи не будуть оброблені або дія не викличе виняток.
getOrDefault(ключ об'єкта, V defaultValue) Повертає значення, на яке зіставляється вказаний ключ, або defaultValue, якщо ця карта не містить зіставлення для ключа.
hashCode() Повертає значення хеш-коду для цієї карти.
putIfAbsent(ключ K, значення V) Якщо вказаний ключ ще не пов’язано зі значенням (або зіставлено з null), він пов’язує його з заданим значенням і повертає null, інакше повертає поточне значення.
видалити (ключ об'єкта, значення об'єкта) Видаляє запис для вказаного ключа, лише якщо він наразі зіставлений із вказаним значенням.
замінити (клавіша K, значення V) Замінює запис для вказаного ключа, лише якщо він наразі зіставлено з деяким значенням.
замінити (ключ K, V oldValue, V newValue) Замінює запис для вказаного ключа, лише якщо наразі зіставлено з вказаним значенням.

replaceAll (функція BiFunction)

Замінює значення кожного запису результатом виклику заданої функції для цього запису, доки всі записи не будуть оброблені або функція викличе виняткову ситуацію.

Переваги Java HashMap

  • Швидкий пошук: HashMaps забезпечує постійний доступ до елементів у часі, що означає, що пошук і вставка елементів відбувається дуже швидко.
  • Ефективне зберігання : HashMaps використовує функцію хешування для зіставлення ключів з індексами в масиві. Це дозволяє швидко шукати значення на основі ключів і ефективно зберігати дані.
  • Гнучкість : HashMaps допускає нульові ключі та значення та може зберігати пари ключ-значення будь-якого типу даних.
  • Простий у використанні : HashMaps мають простий інтерфейс і можуть бути легко реалізовані на Java.
  • Підходить для великих наборів даних : HashMaps може обробляти великі набори даних без сповільнення.

Недоліки Java HashMap

  • Невпорядкований : HashMaps не впорядковані, що означає, що порядок додавання елементів на карту не зберігається.
  • Небезпечно для потоків : HashMaps небезпечні для потоків, а це означає, що якщо кілька потоків отримують доступ до однієї хеш-карти одночасно, це може призвести до неузгодженості даних.
  • Продуктивність може погіршитися : У деяких випадках, якщо функція хешування реалізована неправильно або якщо коефіцієнт завантаження занадто високий, продуктивність HashMap може погіршитися.
  • Більш складний, ніж масиви чи списки : HashMaps може бути складнішим для розуміння та використання, ніж прості масиви чи списки, особливо для початківців.
  • Більше використання пам'яті : оскільки HashMaps використовують базовий масив, вони можуть використовувати більше пам’яті, ніж інші структури даних, такі як масиви чи списки. Це може бути недоліком, якщо використання пам'яті викликає занепокоєння.
  • Hashmap проти Treemap
  • Hashmap проти HashTable
  • Останні статті про Java HashMap

Поширені запитання щодо Java HashMap

1. Що таке HashMap в Java?

HashMap у Java — це клас із фреймворку колекції, який може зберігати всередині себе пари ключ-значення.

2. Навіщо використовувати HashMap у Java?

HashMap у Java використовується для зберігання пар ключ-значення, де кожен ключ є унікальним.

3. У чому перевага HashMap?

HashMap використовується, оскільки він надає такі функції, як:

  • Швидкий пошук
  • Ефективне зберігання
  • Гнучкий у використанні
  • Простий у використанні
  • Підходить для великих наборів даних