Метады HashMap Java



HashMap ява Карта Java

Клас HashMap на Java захоўвае дадзеныя ў выглядзе ключ-значэнне пары, дзе ключавыя дадзеныя павінны быць унікальнымі. Мы можам атрымаць доступ да значэнняў на аснове адпаведных ключавых дадзеных. HashMap прысутнічае ў рамках Java's 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, а таксама метады, згаданыя ў табліцы ніжэй

МетадапісаннеПараметр
пустата ясна ()Выдаляе ўсе адлюстраванні на гэтай карце, што азначае, што карта будзе пустая
Клон аб'екта ()Вяртае неглыбокую копію гэтага экземпляра HashMap. Самі ключ і каштоўнасці не клануюцца
Логічны containsKey (Ключ аб'екта)Вяртае true, калі ёсць значэнне адлюстравання для ўказанага ключаключ - ключ, для якога нам трэба атрымаць значэнне
Логічнае змяшчае значэнне (значэнне аб'екта)Вяртае ісціну, калі ёсць адлюстраванне ключа для зададзенага значэннязначэнне - значэнне, для якога адлюстраваны ўказаны ключ
Усталяваць entrySet ()Вяртае зададзены выгляд адлюстравання карты
Логічнае роўна (аб'ект o)Вяртае true, калі аб'ект мае аднолькавае адлюстраванне картыo - аб'ект для параўнання
Цэлае атрыманне (Ключ аб'екта)Вяртае значэнне названага ключа на карце. Ён вяртае нуль, калі няма адлюстраванняключ - ключ, для якога неабходна атрымаць адлюстраванне значэнняў
Integer getOrDefault (Ключ аб'екта, Integer defaultvalue)Вяртае значэнне ўказанага ключа пры супастаўленні, інакш вяртае значэнне па змаўчанні, калі адлюстраванне адсутнічаеключ - ключ, які мы ацэньваем, павінен быць вернуты
defaultvalue - значэнне па змаўчанні, якое трэба вярнуць, калі няма адлюстравання
int hashCode ()Вяртае значэнне хэш-кода карты
Логічны isEmpty ()Вяртае true, калі хэш-карта не мае пар ключ-значэнне
Усталяваць keySet ()Вяртае зададзены выгляд клавіш, прысутных на карце
Цэлае цэлае (ключ радка, значэнне int)Звязвае ключ са значэннем. Калі ключ ужо ёсць, ён замяняе старое значэнне новымключ - ключ для адлюстравання
value - значэнне для ўказанага ключа
void putAll (Карта м)Звязвае ўсе супастаўленні ключавых значэнняў м з бягучай картайm - копіі адлюстравання, якія трэба дадаць да бягучай карты
Цэлае лік putIfAbsent (Ключ радка, цэлае значэнне)Звязвае значэнне, калі яно яшчэ не адлюстраванае з ключом, інакш вяртае бягучае значэннеключ - ключ для адлюстравання
значэнне - значэнне, якое трэба звязаць
Цэлае выдаленне (Ключ аб'екта)Выдаляе адлюстраванне для ўказанага ключа на карцеключ - ключ на карце, для якога неабходна выдаліць адлюстраванне
Логічнае выдаленне (ключ аб'екта, значэнне аб'екта)Выдаляе запіс указанага ключа толькі ў тым выпадку, калі ён адлюстраваны з зададзеным значэннемключ - ключ на карце
значэнне - значэнне, супастаўленае з ключом
Цэлае замяненне (ключ радка, цэлае значэнне)Замяняе значэнне ўказанага ключа на значэнне толькі ў тым выпадку, калі яно ў цяперашні час адлюстравана з нейкім значэннемключ - ключ на карце
значэнне - значэнне, якое падлягае замене
Логічная замена (ключ радка, цэлае старое значэнне, цэлае новае значэнне)Замяняе запіс указанага ключа новым значэннем толькі ў тым выпадку, калі ён ужо адлюстраваны ўказаным старым значэннемключ - ключ на карце
oldvalue - старая каштоўнасць, адлюстраваная ў ключ
newvalue - новае значэнне, якое адлюстроўваецца на ключ
памер int ()Вяртае памер карты
Радок toString ()Вяртае радкавае прадстаўленне карты
Значэнні калекцыі ()Вяртае выгляд калекцыі значэнняў, прысутных на карце

Выключэнні HashMap

Ён выкідвае ніжэй выключэнні ў Java:

  • ConcurrentModificationException
  • IllelgalMonitorStateException
  • NullPointerException
  • InterruptedException
  • 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 прысутнічае, і, такім чынам, ён вяртае ісціну, а Ravi адсутнічае і, такім чынам, вяртае false.

Аналагічна, containsValue метад правярае наяўнасць пэўнага значэння. Тут 102 прысутнічае, але 110 адсутнічае і, такім чынам, вяртае ілжывае.

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 з цэлага і Радок тып для захоўвання моў. Мы замяняем 2-е значэнне новымі дадзенымі і замяняем 3-е значэнне, калі пэўная пара ключ-значэнне прысутнічае на карце з выкарыстаннем замяніць () метад.

Затым мы выдаляем трэці элемент з дапамогай ключа і выдаляем 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 выкарыстоўвае ясна () метад для ачысткі адлюстравання пар ключ-значэнне на карце і isEmpty метад правярае, ці пустая карта. Першы вывад ілжывы, паколькі адлюстраванне прысутнічае, а другі вывад праўдзівы, паколькі карта не мае ніякіх пар ключ-значэнне пасля выкліку метаду 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 () і значэння ()

Іншы спосаб цыкла праз элементы Hashmap - выкарыстанне keySet () метад. Выкарыстоўваючы гэта, мы можам атрымаць набор усіх клавіш паасобку, як паказана ў прыведзеным ніжэй прыкладзе. Каб атрымаць усе значэнні паасобку, мы можам выкарыстоўваць values ​​() метад і раздрукуйце іх у цыкле for.

Выкарыстоўваючы 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 і розныя яго метады разам з рознымі прыкладамі.

Спасылка