HashMap 메소드 Java  



해시맵 자바 자바지도

Java의 HashMap 클래스는 데이터를 다음 형식으로 저장합니다. 핵심 가치 키 데이터가 고유해야하는 쌍. 해당 키 데이터를 기반으로 값에 액세스 할 수 있습니다. HashMap은 Java의 Collection 프레임 워크에 있으며 java.util 패키지의 일부입니다. 해싱 기술의 원리에 따라 작동합니다.

Java HashMap 계층 구조  

Java의 HashMap 클래스는 추상 수업 초록지도 및 구현 지도 아래와 같이 인터페이스.

자바의 HashMap

HashMap 구조 및 작동 원리  

Java의 HashMap은 다음 원칙에 따라 작동합니다. 해싱 기술. 해싱에서는 해시 함수를 사용하여 HashMap의 키와 값을 연결합니다. HashMap은 키-값 쌍을 정렬 각 항목이 버킷으로 간주되는 노드 수 버킷은 배열의 요소 일뿐입니다. 각 노드에는 3 개의 값이 있습니다. , 가치 및 링크 다음 것 마디. 둘 이상의 노드가 동일한 인덱스를 공유하는 경우 연결된 목록을 나타냅니다. 모든 노드는 hashcode ()를 사용하여 계산되는 버킷의 인덱스에 매핑됩니다.

자바의 HashMap

HashMap 성능  

Java에서 HashMap의 성능은 아래 매개 변수에 따라 다릅니다.

  • 초기 용량 – HashMap이 초기화 될 때 저장할 수있는 버킷 수를 나타냅니다. 기본적으로 16 키-값 쌍
  • 부하율 – 증가해야하는 용량의 백분율입니다. 기본적으로 0.75
  • 임계 값 – 기본값이 다음과 같은 부하율과 용량의 곱입니다. 12 (16 * 0.75)
  • Rehashing – 임계 값에 도달 한 후 용량을 두 배로 늘리는 프로세스입니다.
참조
자바의 ArrayBlockingQueue

자바 HashMap 선언  

Java에서 HashMap을 사용하려면 java.util.HashMap 꾸러미. 구문은 다음과 같습니다.

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

키 유형 – 주요 데이터의 유형입니다.. 예 : 문자열 또는 정수

ValueType – 값 데이터의 유형입니다. 예 : 문자열 또는 정수

HashMap 기능  

다음은 Java에서 HashMap의 기능입니다.

  • 각 키에 해당하는 값을 저장합니다.
  • 고유 한 키만 포함
  • 중복 키를 허용하지 않지만 중복 값을 가질 수 있음
  • 데이터가 삽입되는 순서가 검색된 순서와 같지 않음을 의미하는 순서를 유지하지 않습니다.
  • 동기화되지 않음

Java HashMap 클래스 생성자  

HashMap은 아래 표에서 볼 수 있듯이 4 개의 다른 생성자를 지원합니다.

건설자제품 설명
HashMap ()기본 HashMap을 초기화합니다.
HashMap (Mapm)Map m의 요소로 Hashmap을 초기화합니다.
HashMap (int 용량)지정된 용량 정수 값으로 해시 맵을 초기화합니다.
HashMap (int capacity, float loadfactor)지정된 용량 및로드 팩터로 해시 맵을 초기화합니다.

HashMap 메서드  

Java HashMap은 아래 표에 언급 된 메소드와 함께 Map 인터페이스에 속하는 모든 메소드를 지원합니다.

방법제품 설명매개 변수
무효 clear ()이 맵의 모든 매핑을 제거하므로 맵이 비어 있습니다.
개체 clone ()이 HashMap 인스턴스의 얕은 복사본을 반환합니다. 키와 값 자체는 복제되지 않습니다.
부울 containsKey (객체 키)지정된 키에 대한 매핑 값이있는 경우 true를 반환합니다.key-값을 검색해야하는 키
부울 containsValue (객체 값)지정된 값에 대한 키 매핑이있는 경우 true를 반환합니다.value-지정된 키가 매핑되는 값
세트 entrySet ()지도 매핑의 집합보기를 반환합니다.
부울 같음 (Object o)객체에지도와 동일한 매핑이있는 경우 true를 반환합니다.o-비교할 객체
정수 get (객체 키)지도에서 지정된 키의 값을 반환합니다. 매핑이 없으면 null을 반환합니다.key-값 매핑을 검색해야하는 키
정수 getOrDefault (개체 키, 정수 기본값)매핑 된 경우 지정된 키의 값을 반환하고 매핑이없는 경우 기본값을 반환합니다.key-값을 반환해야하는 키
defaultvalue-매핑이 없을 때 반환되는 기본값
int hashCode ()지도의 해시 코드 값을 반환합니다.
부울 isEmpty ()해시 맵에 키-값 쌍이 없으면 true를 반환합니다.
keySet () 설정지도에있는 키의 세트보기를 반환합니다.
정수 put (문자열 키, 정수 값)키를 값과 연결합니다. 키가 이미있는 경우 이전 값을 새 값으로 바꿉니다.key-매핑을위한 키
value-지정된 키의 값
void putAll (맵 m)m의 모든 키-값 매핑을 현재 맵에 연결합니다.m-현재 맵에 추가 할 매핑 사본
정수 putIfAbsent (String key, Integer value)키에 이미 매핑되지 않은 경우 값을 연결하고 그렇지 않으면 현재 값을 반환합니다.key-매핑을위한 키
value-연관 될 값
정수 제거 (개체 키)맵에서 지정된 키에 대한 매핑을 제거합니다.key-매핑을 제거해야하는 맵의 키
부울 제거 (개체 키, 개체 값)지정된 값으로 매핑 된 경우에만 지정된 키의 항목을 제거합니다.key-지도의 키
value-키에 매핑 된 값
정수 바꾸기 (문자열 키, 정수 값)현재 일부 값으로 매핑 된 경우에만 지정된 키의 값을 값으로 바꿉니다.key-지도의 키
value-대체 할 값
부울 대체 (문자열 키, 정수 이전 값, 정수 새 값)지정된 이전 값으로 이미 매핑 된 경우에만 지정된 키의 항목을 새 값으로 바꿉니다.key-지도의 키
oldvalue-키에 매핑 된 oldvalue
newvalue-키에 매핑 될 newvalue
int 크기 ()지도의 크기를 반환
String toString ()지도의 문자열 표현을 반환합니다.
컬렉션 값 ()지도에있는 값의 컬렉션보기를 반환합니다.
참조
자바의 HashSet

HashMap 예외  

Java에서 아래 예외가 발생합니다.

  • 동시 수정 예외
  • 불법 모니터 상태 예외
  • NullPointer 예외
  • 인터럽트된 예외
  • IllegalArgumentException

HashMap에 요소 추가  

아래 예제에서 볼 수 있듯이 먼저 String 유형의 키와 Integer 유형의 값으로 'student'라는 이름의 HashMap을 생성합니다. 그런 다음 다음을 사용하여 개별 키-값 쌍을 추가합니다. 놓다 방법. 출력에서 요소가 검색되는 순서가 삽입 된 순서와 동일하지 않음을 알 수 있습니다.

다음으로 'stu'라는 두 번째 HashMap을 만든 다음 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}

지도에 특정 키 또는 값이 포함되어 있는지 확인  

우리는 사용 포함키 특정 키가 맵에 있는지 확인하는 방법입니다. 이 경우 Dev가 존재하므로 true를 반환하고 Ravi는 존재하지 않으므로 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로 해시 맵을 생성하고 언어를 저장하려면 입력하세요. 두 번째 값을 새 데이터로 바꾸고 특정 키-값 쌍이지도에 있으면 다음을 사용하여 세 번째 값을 바꿉니다. () 바꾸기 방법.

참조
Java의 LinkedBlockingDeque

그런 다음 키를 사용하여 세 번째 요소를 제거하고 키-값을 사용하여 첫 번째 요소를 제거합니다. 없애다() 방법.

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}

clear 및 empty 메서드의 예  

Java의 HashMap은 맑은() 지도에서 키-값 쌍의 매핑을 지우는 방법 및 비었다 메소드는지도가 비어 있는지 확인합니다. 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

entrySet을 사용하여 HashMap 요소 반복  

Java에서 HashMap의 개별 키-값 쌍을 검색하려면 다음을 사용할 수 있습니다. 항목 집합 HashMap 메서드와 함께 기입 지도 인터페이스 방법을 사용하여 for-each 루프. Map 인터페이스의 Entry 메소드에는 다음과 같은 기본 제공 메소드가 있습니다. 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 루프에서 인쇄합니다.

참조
Java의 BlockingQueue 인터페이스

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 및 다양한 방법에 대해 배웠습니다.

참고