logo

자바의 해시맵

자바에서는 HashMap Java 1.2 이후 Java 컬렉션의 일부입니다. 이 클래스는 다음에서 찾을 수 있습니다. java.util 패키지. 이는 Java Map 인터페이스의 기본 구현을 제공합니다. Java의 HashMap은 (Key, Value) 쌍으로 데이터를 저장하며 다른 유형(예: Integer)의 인덱스로 해당 데이터에 액세스할 수 있습니다. 한 개체는 다른 개체(값)에 대한 키(인덱스)로 사용됩니다. HashMap에 중복 키를 삽입하려고 하면 해당 키의 요소가 대체됩니다.

해시맵이란 무엇입니까?

자바 해시맵 ~와 비슷하다 해시테이블 , 그러나 동기화되지 않았습니다. 널 키도 저장할 수 있지만 널 키 객체는 하나만 있어야 하며 널 값은 제한 없이 있을 수 있습니다. 이 클래스는 지도의 순서를 보장하지 않습니다. 이 클래스와 해당 메서드를 사용하려면 다음을 가져와야 합니다. java.util.HashMap 패키지 또는 해당 슈퍼클래스.

내용의 테이블

Java HashMap 예

다음은 Java HashMap 예제의 구현입니다.

자바




// 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);> >}> >}> }>

>

npm 설치 명령

>

산출

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

해시맵 선언

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

매개변수:

이는 다음과 같은 두 개의 매개변수를 사용합니다.

  • 이 맵에서 유지관리하는 키 유형
  • 매핑된 값의 유형

참고: K eys와 value는 기본 데이터 유형일 수 없습니다. Hashmap의 키가 구현된 경우 유효합니다. hashCode() 및 equals() 메소드 , 해시코드와 동등성이 일정하게 유지되도록 불변(불변 사용자 정의 객체)이어야 합니다. 해시맵의 값은 래퍼 클래스, 사용자 정의 개체, 배열, 참조 유형 또는 null 일 수도 있습니다.

예를 들어 : 해시맵은 배열을 값으로 가질 수 있지만 키로는 가질 수 없습니다.

Java 구현의 HashMap 직렬화 가능 , 복제 가능 , 지도 인터페이스.Java HashMap 확장 추상지도 수업. 직접적인 하위 클래스는 다음과 같습니다. LinkedHashMap 그리고 프린터상태이유 .

Java HashMap의 계층 구조

Java의 HashMap 계층 구조

자바 해시맵의 특징

HashMap은 키를 기반으로 값을 저장하고 검색하는 데 사용되는 데이터 구조입니다. 해시맵의 주요 특징 중 일부는 다음과 같습니다.

  • 빠른 액세스 시간 : HashMap은 요소에 대한 지속적인 시간 액세스를 제공합니다. 즉, 요소 ​​검색 및 삽입이 매우 빠르며 일반적으로 O(1) 시간 복잡도를 갖습니다.
  • 해싱 함수를 사용합니다. : HashMaps는 해시 함수를 사용하여 키를 배열의 인덱스에 매핑합니다. 이를 통해 키를 기반으로 값을 빠르게 검색할 수 있습니다.
  • 키-값 쌍을 저장합니다. HashMap의 각 요소는 키-값 쌍으로 구성됩니다. 키는 연관된 값을 조회하는 데 사용됩니다.
  • 널 키 및 값 지원 : HashMap은 null 값과 키를 허용합니다. 이는 null 키를 사용하여 값을 저장할 수 있고 null 값을 키와 연결할 수 있음을 의미합니다.
  • 주문하지 않음: HashMap은 순서가 지정되지 않습니다. 즉, 요소가 맵에 추가되는 순서가 유지되지 않습니다. 그러나 LinkedHashMap은 삽입 순서를 유지하는 HashMap의 변형입니다.
  • 중복 허용 : HashMap은 중복 값을 허용하지만 중복 키는 허용하지 않습니다. 중복 키가 추가되면 해당 키와 연결된 이전 값을 덮어씁니다.
  • 스레드가 안전하지 않음 : HashMap은 스레드로부터 안전하지 않습니다. 즉, 여러 스레드가 동일한 해시맵에 동시에 액세스하면 데이터 불일치가 발생할 수 있습니다. 스레드 안전성이 필요한 경우 ConcurrentHashMap을 사용할 수 있습니다.
  • 용량 및 부하율 : HashMap에는 보유할 수 있는 요소 수인 용량과 크기가 조정되기 전에 해시맵이 얼마나 가득 찼는지 측정하는 로드 계수가 있습니다.

Java에서 HashMap 만들기

아래에 언급된 예를 통해 Java에서 HashMap을 만드는 방법을 이해해 보겠습니다.

자바




// 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. 해시맵()
  2. HashMap(intinitialCapacity)
  3. HashMap(intinitialCapacity,floatloadFactor)
  4. HashMap(지도 맵)

이제 깨끗한 Java 프로그램의 도움으로 동일한 생성자를 구현하는 것과 함께 위의 생성자를 하나씩 논의합니다.

1. 해시맵()

초기 용량이 16이고 로드 계수가 0.75인 HashMap 인스턴스를 생성하는 기본 생성자입니다.

통사론:

HashMap hm = new HashMap();>

자바




// 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(intinitialCapacity)

다음을 사용하여 HashMap 인스턴스를 생성합니다. 지정된 초기 용량 및 부하율 0.75.

통사론:

HashMap hm = new HashMap(int initialCapacity);>

자바




// 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}>

삼. HashMap(intinitialCapacity,floatloadFactor)

지정된 초기 용량과 지정된 로드 비율을 사용하여 HashMap 인스턴스를 생성합니다.

통사론:

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

자바




// 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 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. 요소 추가 Java의 HashMap에서

지도에 요소를 추가하려면 다음을 사용할 수 있습니다. 놓다() 방법. 그러나 삽입 순서는 해시맵에 유지되지 않습니다. 내부적으로 모든 요소에 대해 별도의 해시가 생성되고 이 해시를 기반으로 요소가 인덱싱되어 더욱 효율적으로 만들어집니다.

자바




// 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. Java에서 HashMap의 요소 변경

요소를 추가한 후 요소를 변경하려면 다음과 같이 요소를 다시 추가하면 됩니다. 놓다() 방법. 맵의 요소는 키를 사용하여 인덱싱되므로 변경하려는 키에 대해 업데이트된 값을 삽입하기만 하면 키 값을 변경할 수 있습니다.

자바




// 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 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 인터페이스를 사용하여 컬렉션 프레임워크의 모든 구조를 탐색할 수 있습니다. Iterator는 한 가지 유형의 데이터로 작업하므로 Entry를 사용하여 두 가지 개별 유형을 호환 가능한 형식으로 해결합니다. 그런 다음 next() 메소드를 사용하여 HashMap의 항목을 인쇄합니다.

자바




// 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>

Java에서 HashMap의 복잡성

HashMap은 기본 작업에 대한 지속적인 시간 복잡성을 제공하며, 해시 함수가 올바르게 작성되고 요소가 버킷 간에 적절하게 분산되는 경우 get 및 put을 제공합니다. HashMap에 대한 반복은 HashMap의 용량과 키-값 쌍의 수에 따라 달라집니다. 기본적으로 용량+크기에 정비례합니다. 용량은 HashMap의 버킷 수입니다. 따라서 처음에 HashMap에 많은 수의 버킷을 유지하는 것은 좋은 생각이 아닙니다.

행동 양식

시간 복잡도

공간 복잡도

HashMap에 요소 추가하기

int를 더블 자바로 변환

오(1)

에)

HashMap에서 요소 제거

오(1)

에)

Java에서 요소 추출

오(1)

에)

HashMap의 주요 기능

값에 접근하려면 해당 키를 알아야 합니다. HashMap은 Hashing이라는 기술을 사용하기 때문에 HashMap으로 알려져 있습니다. 해싱 큰 문자열을 동일한 문자열을 나타내는 작은 문자열로 변환하는 기술입니다. 값이 짧을수록 색인 생성 및 검색 속도가 빨라집니다. 해시세트 또한 내부적으로 HashMap을 사용합니다.
HashMap의 몇 가지 중요한 기능은 다음과 같습니다.

  • HashMap은 java.util 패키지의 일부입니다.
  • HashMap은 Map 인터페이스의 불완전한 구현도 제공하는 추상 클래스 AbstractMap을 확장합니다.
  • 또한 복제 가능 그리고 직렬화 가능 인터페이스. 위 정의에서 K와 V는 각각 Key와 Value를 나타냅니다.
  • HashMap은 중복 키를 허용하지 않지만 중복 값은 허용합니다. 즉, 단일 키는 2개 이상의 값을 포함할 수 없지만 2개 이상의 키는 단일 값을 포함할 수 있습니다.
  • HashMap은 null 키도 허용하지만 한 번 및 여러 개의 null 값만 허용합니다.
  • 이 클래스는 맵의 순서를 보장하지 않습니다. 특히, 시간이 지나도 순서가 일정하게 유지된다는 보장은 없습니다. HashTable과 거의 유사하지만 동기화되지 않습니다.

HashMap의 내부 구조

내부적으로 HashMap에는 노드 배열이 포함되어 있으며 노드는 4개의 필드를 포함하는 클래스로 표시됩니다.

  1. 정수 해시
  2. K 키
  3. V 값
  4. 다음 노드

노드가 자신의 객체에 대한 참조를 포함하고 있음을 알 수 있습니다. 그래서 연결리스트입니다.

해시맵:

자바 해시맵

마디:

node_hash_map

HashMap의 성능

HashMap의 성능은 다음과 같이 명명된 2개의 매개변수에 따라 달라집니다.

  1. 초기 용량
  2. 부하율

1. 초기 용량 – HashMap 생성 당시의 용량입니다(HashMap이 인스턴스화될 때 HashMap이 보유할 수 있는 버킷 수입니다). Java에서는 초기에 2^4=16입니다. 이는 16개의 키-값 쌍을 보유할 수 있음을 의미합니다.

2. 부하율 – Hashmap의 용량을 증가시키기 위한 용량의 백분율 값입니다(Rehashing이 수행된 후 버킷이 채워지는 백분율입니다). Java에서는 기본적으로 0.75f입니다. 즉, 용량의 75%를 채운 후 재해싱이 수행된다는 의미입니다.

3. 임계값 – 부하율과 초기용량의 곱입니다. Java에서는 기본적으로 (16 * 0.75 = 12)입니다. 즉, HashMap에 12개의 키-값 쌍을 삽입한 후 Rehashing이 수행됩니다.

4. 재해싱 – HashMap이 임계값에 도달한 후 용량을 두 배로 늘리는 프로세스입니다. Java에서 HashMap은 기본적으로 2^4, 2^5, 2^6, 2^7, … 순서로 다시 해시를 계속합니다. 곧.

초기 용량을 높게 유지하면 재해싱이 수행되지 않습니다. 그러나 더 높게 유지하면 반복의 시간 복잡성이 증가합니다. 따라서 성능을 높이려면 매우 영리하게 선택해야 합니다. 초기 용량을 설정하려면 예상되는 값 수를 고려해야 합니다. 가장 일반적으로 선호되는 부하율 값은 0.75이며 이는 시간과 공간 비용 사이에서 상당한 이점을 제공합니다. 부하율의 값은 0에서 1 사이입니다.

메모: Java 8부터 Java는 연결을 위해 연결된 목록 대신 자체 균형 BST를 사용하기 시작했습니다. 자체 균형 bst의 장점은 최악의 경우(모든 키가 동일한 슬롯에 매핑되는 경우) 검색 시간이 O(Log n)라는 것입니다.

동기화된 해시맵

HashMap은 비동기화되어 있으므로 여러 스레드가 동시에 액세스할 수 있습니다. 여러 스레드가 이 클래스에 동시에 액세스하고 최소한 하나의 스레드가 이를 구조적으로 조작하는 경우 외부에서 동기화해야 합니다. 지도를 캡슐화하는 일부 개체를 동기화하여 수행됩니다. 그러한 개체가 존재하지 않으면 Collections.synchronizedMap() 주위에 래핑하여 HashMap을 동기화하고 실수로 동기화되지 않은 액세스를 방지할 수 있습니다. 다음 예에서와 같이:

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

이제 Map m이 동기화되었습니다. 이 클래스의 반복자는 반복자의 제거 메소드를 통하지 않고 반복자를 생성한 후 어떤 방식으로든 구조 수정이 수행되면 오류가 발생하지 않습니다. 반복자가 실패하면 ConcurrentModificationException이 발생합니다.

HashMap의 응용:

HashMap은 주로 해싱을 구현합니다. 검색, 삽입 및 삭제 작업을 효율적으로 구현해야 할 때 유용합니다. 다음을 참조하세요. 해싱의 응용 자세한 내용은.

HashMapassociate의 메서드

  • 케이 – 맵의 키 유형.
  • 안에 – 맵에 매핑된 값의 유형입니다.

방법

설명

분명한() 이 지도에서 모든 매핑을 제거합니다.
클론() 이 HashMap 인스턴스의 얕은 복사본을 반환합니다. 키와 값 자체는 복제되지 않습니다.
계산(K 키, BiFunction ? 슈퍼V,? V> remappingFunction 확장) 지정된 키와 현재 매핑된 값(또는 현재 매핑이 없는 경우 null)에 대한 매핑을 계산하려고 시도합니다.
계산IfAbsent(K 키, 함수 슈퍼K,? V> 매핑 기능 확장) 지정된 키가 아직 값과 연결되지 않은 경우(또는 null에 매핑된 경우) 지정된 매핑 함수를 사용하여 해당 값을 계산하려고 시도하고 null이 아닌 경우 이 맵에 입력합니다.
계산IfPresent(K 키, BiFunction ? 슈퍼V,? V> remappingFunction 확장) 지정된 키의 값이 존재하고 null이 아닌 경우 키와 현재 매핑된 값을 바탕으로 새 매핑을 계산하려고 시도합니다.
containKey(객체 키) 이 맵에 지정된 키에 대한 매핑이 포함되어 있으면 true를 반환합니다.
containValue(객체 값) 이 맵이 하나 이상의 키를 지정된 값에 매핑하는 경우 true를 반환합니다.
엔트리셋() 이 맵에 포함된 매핑의 Set 뷰를 반환합니다.
get(객체 키) 지정된 키가 매핑된 값을 반환하거나, 이 맵에 키에 대한 매핑이 포함되어 있지 않으면 null을 반환합니다.
비었다() 이 맵에 키-값 매핑이 없으면 true를 반환합니다.
키세트() 이 맵에 포함된 키의 Set 뷰를 반환합니다.
병합(K 키, V 값, BiFunction ? 슈퍼V,? V> remappingFunction 확장) 지정된 키가 아직 값과 연결되어 있지 않거나 null과 연결되어 있는 경우 해당 키를 지정된 null이 아닌 값과 연결합니다.
put(K 키, V 값) 지정된 값을 이 맵의 지정된 키와 연결합니다.
putAll(맵m) 지정된 맵의 모든 매핑을 이 맵에 복사합니다.
제거(객체 키) 지정된 키에 대한 매핑이 있는 경우 이 맵에서 제거합니다.
크기() 이 맵의 키-값 매핑 수를 반환합니다.
값() 이 맵에 포함된 값의 컬렉션 뷰를 반환합니다.

클래스 java.util.AbstractMap에서 상속된 메소드

방법

설명

같음()

지정된 개체가 이 맵과 동일한지 비교합니다.

해시 코드()

이 지도의 해시 코드 값을 반환합니다.

toString()

이 지도의 문자열 표현을 반환합니다.

인터페이스 java.util.Map에서 상속된 메소드

방법

설명

같음() 지정된 개체가 이 맵과 동일한지 비교합니다.

forEach(BiConsumer 작업)

모든 항목이 처리되거나 작업에서 예외가 발생할 때까지 이 맵의 각 항목에 대해 지정된 작업을 수행합니다.
getOrDefault(객체 키, V defaultValue) 지정된 키가 매핑된 값을 반환하거나, 이 맵에 키에 대한 매핑이 포함되어 있지 않은 경우 defaultValue를 반환합니다.
해시 코드() 이 지도의 해시 코드 값을 반환합니다.
putIfAbsent(K 키, V 값) 지정된 키가 아직 값과 연결되지 않은 경우(또는 null에 매핑된 경우) 해당 키를 지정된 값과 연결하고 null을 반환하고, 그렇지 않으면 현재 값을 반환합니다.
제거(객체 키, 객체 값) 현재 지정된 값에 매핑된 경우에만 지정된 키에 대한 항목을 제거합니다.
교체(K 키, V 값) 현재 일부 값에 매핑된 경우에만 지정된 키에 대한 항목을 바꿉니다.
교체(K 키, V oldValue, V newValue) 현재 지정된 값에 매핑된 경우에만 지정된 키에 대한 항목을 바꿉니다.

replacementAll(BiFunction 함수)

모든 항목이 처리되거나 함수에서 예외가 발생할 때까지 각 항목의 값을 해당 항목에 대해 지정된 함수를 호출한 결과로 바꿉니다.

자바 HashMap의 장점

  • 빠른 검색: HashMap은 요소에 대한 지속적인 액세스를 제공하므로 요소 검색 및 삽입이 매우 빠릅니다.
  • 효율적인 저장 : HashMaps는 해싱 함수를 사용하여 키를 배열의 인덱스에 매핑합니다. 이를 통해 키를 기반으로 값을 빠르게 조회하고 데이터를 효율적으로 저장할 수 있습니다.
  • 유연성 : HashMap은 null 키와 값을 허용하고 모든 데이터 유형의 키-값 쌍을 저장할 수 있습니다.
  • 사용하기 쉬운 : HashMap은 간단한 인터페이스를 가지며 Java로 쉽게 구현할 수 있습니다.
  • 대규모 데이터 세트에 적합 : HashMap은 속도 저하 없이 대규모 데이터 세트를 처리할 수 있습니다.

자바 HashMap의 단점

  • 정렬되지 않은 : HashMap은 순서가 지정되지 않습니다. 즉, 요소가 맵에 추가되는 순서가 유지되지 않습니다.
  • 스레드로부터 안전하지 않음 : HashMap은 스레드로부터 안전하지 않습니다. 즉, 여러 스레드가 동일한 해시맵에 동시에 액세스하면 데이터 불일치가 발생할 수 있습니다.
  • 성능이 저하될 수 있음 : 경우에 따라 해싱 기능이 제대로 구현되지 않거나 부하율이 너무 높을 경우 HashMap의 성능이 저하될 수 있습니다.
  • 배열이나 목록보다 복잡함 : HashMap은 특히 초보자의 경우 단순한 배열이나 목록보다 이해하고 사용하기가 더 복잡할 수 있습니다.
  • 더 높은 메모리 사용량 : HashMap은 기본 배열을 사용하므로 배열이나 목록과 같은 다른 데이터 구조보다 더 많은 메모리를 사용할 수 있습니다. 메모리 사용량이 문제가 되는 경우 이는 단점이 될 수 있습니다.
  • 해시맵과 트리맵
  • 해시맵과 해시테이블
  • Java HashMap에 관한 최근 기사

Java HashMap에 대한 FAQ

1. Java의 HashMap이란 무엇입니까?

Java의 HashMap은 내부에 키-값 쌍을 저장할 수 있는 컬렉션 프레임워크의 클래스입니다.

2. Java에서 HashMap을 사용하는 이유는 무엇입니까?

Java의 HashMap은 각 키가 고유한 키-값 쌍을 저장하는 데 사용됩니다.

3. HashMap의 이점은 무엇입니까?

HashMap은 다음과 같은 기능을 제공하기 때문에 사용됩니다.

  • 빠른 검색
  • 효율적인 저장
  • 유연한 사용
  • 사용하기 쉬운
  • 대규모 데이터 세트에 적합