자바 해시맵 클래스는 우리를 허용하는 Map 인터페이스를 구현합니다. 키와 값 쌍을 저장하기 위해 , 여기서 키는 고유해야 합니다. 중복 키를 삽입하려고 하면 해당 키의 요소가 대체됩니다. 업데이트, 삭제 등의 키 인덱스를 사용하여 작업을 쉽게 수행할 수 있습니다. HashMap 클래스는java.util패키지.
Java의 HashMap은 레거시 Hashtable 클래스와 비슷하지만 동기화되지 않습니다. null 요소도 저장할 수 있지만 null 키는 하나만 있어야 합니다. Java 5부터는 다음과 같이 표시됩니다.해시맵여기서 K는 키를 나타내고 V는 값을 나타냅니다. AbstractMap 클래스를 상속하고 Map 인터페이스를 구현합니다.
기억해야 할 점
- Java HashMap에는 키를 기반으로 하는 값이 포함되어 있습니다.
- Java HashMap에는 고유 키만 포함됩니다.
- Java HashMap에는 하나의 null 키와 여러 개의 null 값이 있을 수 있습니다.
- Java HashMap이 동기화되지 않았습니다.
- Java HashMap은 순서를 유지하지 않습니다.
- Java HashMap 클래스의 초기 기본 용량은 16이고 로드 계수는 0.75입니다.
HashMap 클래스의 계층 구조
위 그림에서 볼 수 있듯이 HashMap 클래스는 AbstractMap 클래스를 확장하고 Map 인터페이스를 구현합니다.
HashMap 클래스 선언
java.util.HashMap 클래스 선언을 살펴보겠습니다.
재스민 데이비스의 어린시절
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
HashMap 클래스 매개변수
java.util.HashMap 클래스의 매개변수를 살펴보겠습니다.
Java HashMap 클래스의 생성자
건설자 | 설명 |
---|---|
해시맵() | 기본 HashMap을 구성하는 데 사용됩니다. |
HashMap(맵 m) | 주어진 Map 객체 m의 요소를 사용하여 해시 맵을 초기화하는 데 사용됩니다. |
HashMap(정수 용량) | 해시 맵의 용량을 주어진 정수 값인 용량으로 초기화하는 데 사용됩니다. |
HashMap(int 용량, float loadFactor) | 인수를 사용하여 해시 맵의 용량과 로드 비율을 모두 초기화하는 데 사용됩니다. |
Java HashMap 클래스의 메소드
방법 | 설명 |
---|---|
무효 클리어() | 이 지도에서 모든 매핑을 제거하는 데 사용됩니다. |
부울 isEmpty() | 이 맵에 키-값 매핑이 없으면 true를 반환하는 데 사용됩니다. |
객체 복제() | 이 HashMap 인스턴스의 얕은 복사본을 반환하는 데 사용됩니다. 키와 값 자체는 복제되지 않습니다. |
EntrySet() 설정 | 이 맵에 포함된 매핑의 컬렉션 뷰를 반환하는 데 사용됩니다. |
키세트() 설정 | 이 맵에 포함된 키의 집합 보기를 반환하는 데 사용됩니다. |
V put(객체 키, 객체 값) | 지도에 항목을 삽입하는 데 사용됩니다. |
void putAll(지도 맵) | 지정된 지도를 지도에 삽입하는데 사용됩니다. |
V putIfAbsent(K 키, V 값) | 아직 지정되지 않은 경우에만 지정된 키와 함께 지정된 값을 맵에 삽입합니다. |
V 제거(객체 키) | 지정된 키에 대한 항목을 삭제하는 데 사용됩니다. |
불리언 제거(객체 키, 객체 값) | 연관된 지정된 키와 함께 지정된 값을 맵에서 제거합니다. |
V 계산(K 키, BiFunction remappingFunction) | 지정된 키와 현재 매핑된 값(또는 현재 매핑이 없는 경우 null)에 대한 매핑을 계산하는 데 사용됩니다. |
V 계산IfAbsent(K 키, 함수 매핑함수) | 지정된 키가 아직 값과 연결되어 있지 않은 경우(또는 null에 매핑된 경우) 지정된 매핑 함수를 사용하여 해당 값을 계산하는 데 사용되며, null이 아닌 경우 해당 키를 이 맵에 입력합니다. |
V 계산IfPresent(K 키, BiFunction remappingFunction) | 지정된 키의 값이 존재하고 null이 아닌 경우 키와 현재 매핑된 값이 주어지면 새 매핑을 계산하는 데 사용됩니다. |
boolean containValue(객체 값) | 이 메서드는 해당 값과 동일한 값이 맵 내에 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
boolean containKey(객체 키) | 이 메서드는 키와 동일한 키가 맵 내에 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
부울 같음(객체 o) | 지정된 객체를 맵과 비교하는 데 사용됩니다. |
void forEach(BiConsumer 작업) | 모든 항목이 처리되거나 작업에서 예외가 발생할 때까지 맵의 각 항목에 대해 지정된 작업을 수행합니다. |
V get(객체 키) | 이 메소드는 키와 연관된 값을 포함하는 객체를 반환합니다. |
V getOrDefault(객체 키, V defaultValue) | 지정된 키가 매핑된 값을 반환하거나, 맵에 키에 대한 매핑이 포함되어 있지 않은 경우 defaultValue를 반환합니다. |
부울 isEmpty() | 이 메서드는 지도가 비어 있으면 true를 반환합니다. 하나 이상의 키가 포함되어 있으면 false를 반환합니다. |
V 병합(K 키, V 값, BiFunction remappingFunction) | 지정된 키가 아직 값과 연결되어 있지 않거나 null과 연결된 경우 해당 키를 지정된 null이 아닌 값과 연결합니다. |
V 대체(K 키, V 값) | 지정된 키에 대해 지정된 값을 대체합니다. |
부울 교체(K 키, V oldValue, V newValue) | 지정된 키의 이전 값을 새 값으로 바꿉니다. |
void replacementAll(BiFunction 함수) | 모든 항목이 처리되거나 함수에서 예외가 발생할 때까지 각 항목의 값을 해당 항목에 대해 지정된 함수를 호출한 결과로 바꿉니다. |
컬렉션 값() | 맵에 포함된 값의 컬렉션 뷰를 반환합니다. |
정수 크기() | 이 메소드는 지도의 항목 수를 반환합니다. |
자바 해시맵 예
키와 값 쌍을 저장하는 HashMap의 간단한 예를 살펴보겠습니다.
import java.util.*; public class HashMapExample1{ public static void main(String args[]){ HashMap map=new HashMap();//Creating HashMap map.put(1,'Mango'); //Put elements in Map map.put(2,'Apple'); map.put(3,'Banana'); map.put(4,'Grapes'); System.out.println('Iterating Hashmap...'); for(Map.Entry m : map.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }지금 테스트해보세요
Iterating Hashmap... 1 Mango 2 Apple 3 Banana 4 Grapes
이 예에서는 Integer를 키로, String을 값으로 저장하므로 다음을 사용합니다.해시맵유형으로. 그만큼놓다()메소드는 맵에 요소를 삽입합니다.
키 및 값 요소를 얻으려면 getKey() 및 getValue() 메서드를 호출해야 합니다. 그만큼지도.입장인터페이스에는 getKey() 그리고 getValue() 행동 양식. 하지만 Map.Entry의 인스턴스를 얻으려면 Map 인터페이스의 EntrySet() 메소드를 호출해야 합니다.
HashMap에 중복 키가 없습니다
HashMap에는 중복 키를 저장할 수 없습니다. 그러나 중복 키를 다른 값으로 저장하려고 하면 해당 값이 대체됩니다.
import java.util.*; public class HashMapExample2{ public static void main(String args[]){ HashMap map=new HashMap();//Creating HashMap map.put(1,'Mango'); //Put elements in Map map.put(2,'Apple'); map.put(3,'Banana'); map.put(1,'Grapes'); //trying duplicate key System.out.println('Iterating Hashmap...'); for(Map.Entry m : map.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }지금 테스트해보세요
Iterating Hashmap... 1 Grapes 2 Apple 3 Banana
() 요소를 추가하는 Java HashMap 예제
여기서는 요소를 삽입하는 다양한 방법을 볼 수 있습니다.
import java.util.*; class HashMap1{ public static void main(String args[]){ HashMap hm=new HashMap(); System.out.println('Initial list of elements: '+hm); hm.put(100,'Amit'); hm.put(101,'Vijay'); hm.put(102,'Rahul'); System.out.println('After invoking put() method '); for(Map.Entry m:hm.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } hm.putIfAbsent(103, 'Gaurav'); System.out.println('After invoking putIfAbsent() method '); for(Map.Entry m:hm.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } HashMap map=new HashMap(); map.put(104,'Ravi'); map.putAll(hm); System.out.println('After invoking putAll() method '); for(Map.Entry m:map.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }
Initial list of elements: {} After invoking put() method 100 Amit 101 Vijay 102 Rahul After invoking putIfAbsent() method 100 Amit 101 Vijay 102 Rahul 103 Gaurav After invoking putAll() method 100 Amit 101 Vijay 102 Rahul 103 Gaurav 104 Ravi
제거() 요소를 위한 Java HashMap 예제
여기서는 요소를 제거하는 다양한 방법을 볼 수 있습니다.
import java.util.*; public class HashMap2 { public static void main(String args[]) { HashMap map=new HashMap(); map.put(100,'Amit'); map.put(101,'Vijay'); map.put(102,'Rahul'); map.put(103, 'Gaurav'); System.out.println('Initial list of elements: '+map); //key-based removal map.remove(100); System.out.println('Updated list of elements: '+map); //value-based removal map.remove(101); System.out.println('Updated list of elements: '+map); //key-value pair based removal map.remove(102, 'Rahul'); System.out.println('Updated list of elements: '+map); } }
산출:
Initial list of elements: {100=Amit, 101=Vijay, 102=Rahul, 103=Gaurav} Updated list of elements: {101=Vijay, 102=Rahul, 103=Gaurav} Updated list of elements: {102=Rahul, 103=Gaurav} Updated list of elements: {103=Gaurav}
() 요소를 대체하는 Java HashMap 예제
여기서는 요소를 교체하는 다양한 방법을 볼 수 있습니다.
import java.util.*; class HashMap3{ public static void main(String args[]){ HashMap hm=new HashMap(); hm.put(100,'Amit'); hm.put(101,'Vijay'); hm.put(102,'Rahul'); System.out.println('Initial list of elements:'); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+' '+m.getValue()); } System.out.println('Updated list of elements:'); hm.replace(102, 'Gaurav'); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+' '+m.getValue()); } System.out.println('Updated list of elements:'); hm.replace(101, 'Vijay', 'Ravi'); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+' '+m.getValue()); } System.out.println('Updated list of elements:'); hm.replaceAll((k,v) -> 'Ajay'); for(Map.Entry m:hm.entrySet()) { System.out.println(m.getKey()+' '+m.getValue()); } } }
Initial list of elements: 100 Amit 101 Vijay 102 Rahul Updated list of elements: 100 Amit 101 Vijay 102 Gaurav Updated list of elements: 100 Amit 101 Ravi 102 Gaurav Updated list of elements: 100 Ajay 101 Ajay 102 Ajay
HashSet과 HashMap의 차이점
HashSet에는 값만 포함되는 반면 HashMap에는 항목(키와 값)이 포함됩니다.
Java HashMap 예: 도서
import java.util.*; class Book { int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } } public class MapExample { public static void main(String[] args) { //Creating map of Books Map map=new HashMap(); //Creating Books Book b1=new Book(101,'Let us C','Yashwant Kanetkar','BPB',8); Book b2=new Book(102,'Data Communications & Networking','Forouzan','Mc Graw Hill',4); Book b3=new Book(103,'Operating System','Galvin','Wiley',6); //Adding Books to map map.put(1,b1); map.put(2,b2); map.put(3,b3); //Traversing map for(Map.Entry entry:map.entrySet()){ int key=entry.getKey(); Book b=entry.getValue(); System.out.println(key+' Details:'); System.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); } } }지금 테스트해보세요
산출:
1 Details: 101 Let us C Yashwant Kanetkar BPB 8 2 Details: 102 Data Communications and Networking Forouzan Mc Graw Hill 4 3 Details: 103 Operating System Galvin Wiley 6
관련 주제
HashMap의 부하 계수
Java에서 HashMap 작업 | HashMap 작동 방식
HashMap을 값별로 정렬하는 방법
내 모니터 화면 크기는 몇이야