- Java HashMap (해쉬맵)
- HashMap 데이터 추가
- HashMap 데이터 가져오기
- HashMap 데이터 수정
- HashMap 데이터 삭제
1. Map 컬렉션 특징
- key, value를 하나의 객체로 저장하는 구조
- 객체 자체를 저장하는 것이 아니라 주소를 참조
- key는 중복 저장될 수 없다.
- value는 중복 저장될 수 있다.
기능 | 메소드 | 설명 |
객체 추가 | put (key, value) | 주어진 key와 value를 Map에 추가 |
객체 검색 | containsKey (key) | 주어진 key가 있는지 여부 리턴 |
containsValue (value) | 주어진 value가 있는지 여부 리턴 | |
get (key) | 주어진 키에 해당하는 값을 리턴 | |
isEmpty () | 컬렉션이 비어 있는지 여부 리턴 | |
keySet () | 모든 key를 set 객체에 담아서 리턴 | |
size () | 저장된 key의 총 개수 리턴 | |
객체 삭제 | claer () | Map의 모든 객체 삭제 |
remove (key) | 해당 key와 일치하는 객체 삭제 |
2. HashMap이란?
- Map 인터페이스를 구현한 대표적인 Map 컬렉션
- 데이터 저장의 순서를 보장하지 않는다.
- key에 대한 Hash 값을 저장하고 조회하기 때문에 많은 양의 데이터를 다룰때 성능이 좋다.
3. HashMap 객체 생성
문법 | HashMap <키_데이터타입, 값_데이터타입> 변수명 = new HashMap<키_데이터타입, 값_데이터타입>(); |
예제 | HashMap<String, Integer> map1 = new HashMap<String, Integer> (); |
HashMap<Integer, Movie> map2 = new HashMap<Integer, Movie> (); | |
HashMap<Book, Integer> map3 = new HashMap<Book, Integer> (); |
4. HashMap에 데이터 추가
문법 | map.put (키_값, 데이터_값); |
예제 | map1.put ("PRODUCTION_COST", 1000); |
map1.put ("SELLING_PRICE",1500); | |
map2.put (10,new Movie("반지의 제왕","피터 잭슨")); | |
map2.put (20,newMovie("헝거 게임","게리 로스")); |
<map1>
KEY | VALUE |
PRODUCTION_COST | 1000 |
SELLING_PRICE | 1500 |
<map2>
KEY | VALUE |
10 | 반지의 제왕, 피터 잭슨 |
20 | 헝거 게임, 게리 로스 |
4.1 예제
package chapter11_2;
import java.util.HashMap;
public class HashMapAdditionEx {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String,Integer>();
map.put("NUMBER1",100);
map.put("NUMBER2",200);
map.put("NUMBER3",300);
System.out.println(map);
}
}
//출력 결과
{NUMBER3=300, NUMBER1=100, NUMBER2=200}
- 출력 순서는 정해져있지 않기에 제각각으로 나온다.
5. HashMap 데이터 가져오기
문법 | 데이터_타입 변수명 = map.get (키_값); HashMap에 들어 있는 데이터 개수 : map.size(); |
예제 | int productionCost = map1.get("PRODUCTION_COST"); |
Movie movie = map2.get(20); | |
int priceSize = map1.size(); //map1 데이터 개수 : 2 | |
int movieSize = map2.size(); //map2 데이터 개수 : 2 |
<map1>
KEY | VALUE |
PRODUCTION_COST | 1000 |
SELLING_PRICE | 1500 |
<map2>
KEY | VALUE |
10 | 반지의 제왕, 피터 잭슨 |
20 | 헝거 게임, 게리 로스 |
- for-each문을 이용하여 HashMap 데이터 접근
package chapter11_2;
import java.util.HashMap;
public class HashMapAdditionEx {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String,Integer>();
map.put("NUMBER1",100);
map.put("NUMBER2",200);
map.put("NUMBER3",300);
for(String key : map.keySet()) {
System.out.println(map.get(key));
}
}
}
- map.get(key)를 통해 key값으로 해당 value값 구하기.
//출력 결과
300
100
200
예제 1
HashMap으로 만들어보자
- student class
package chapter11_1;
public class Student {
private String name;
private int korean;
private int english;
private int math;
public Student(String name, int korean, int english, int math) {
super();
this.name = name;
this.korean = korean;
this.english = english;
this.math = math;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKorean() {
return korean;
}
public void setKorean(int korean) {
this.korean = korean;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
}
- SudentMapTest Class
package chapter11_1;
import java.util.HashMap;
public class StudentMapTest {
public static void main(String[] args) {
HashMap<String, Student> students = new HashMap<>();
//뒤쪽은 생략가능
students.put("STU001", new Student("이순신",80,90,95));
students.put("STU002", new Student("김유신",80,90,95));
students.put("STU003", new Student("강감찬",80,90,95));
for(String studentId : students.keySet()) {
Student student = students.get(studentId);
System.out.println(studentId + "-" + student.getName() +
"( 국어: " + student.getKorean() +
" 영어 : " + student.getEnglish() +
" 수학 : " + student.getMath() + ")");
}
}
}
//출력 결과
STU001-이순신( 국어: 80 영어 : 90 수학 : 95)
STU003-강감찬( 국어: 80 영어 : 90 수학 : 95)
STU002-김유신( 국어: 80 영어 : 90 수학 : 95)
6. HashMap 데이터 내용 교체
문법 | map.put (이미_존재하는_키_값, 데이터_값); |
예제 | map1.put ("PRODUCTION_COST", 1000); |
map1.put ("SELLING_PRICE", 1500); | |
map1.put ("PRODUCTION_COST", 1200); |
<데이터 변경 전>
KEY | VALUE |
PRODUCTION_COST | 1000 |
SELLING_PRICE | 1500 |
<데이터 변경 후>
KEY | VALUE |
PRODUCTION_COST | 1200 |
SELLING_PRICE | 1500 |
package chapter11_2;
import java.util.HashMap;
public class HashMapAdditionEx {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String,Integer>();
map.put("NUMBER1",100);
map.put("NUMBER2",200);
map.put("NUMBER3",300);
for(String key : map.keySet()) {
System.out.println(map.get(key));
}
//데이터 변경
map.put("NUMBER2",550);
System.out.println(map);
}
}
//출력 결과
300
100
200
{NUMBER3=300, NUMBER1=100, NUMBER2=550}
7. HashMap 데이터 삭제
문법 | map.remove (키_값); |
예제 | map1.put ("PRODUCTION_COST", 1000); |
map1.put ("SELLING_PRICE", 1500); | |
map1.remove ("PRODUCTION_COST"); |
<데이터 삭제 전>
KEY | VALUE |
PRODUCTION_COST | 1000 |
SELLING_PRICE | 1500 |
<데이터 삭제 후>
KEY | VALUE |
SELLING_PRICE | 1500 |
package chapter11_2;
import java.util.HashMap;
public class HashMapAdditionEx {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String,Integer>();
map.put("NUMBER1",100);
map.put("NUMBER2",200);
map.put("NUMBER3",300);
for(String key : map.keySet()) {
System.out.println(map.get(key));
}
map.remove("NUMBER2");
System.out.println(map);
}
}
//출력 결과
300
100
200
{NUMBER3=300, NUMBER1=100}
실습
- 이순신 학생의 영어 점수 92점으로 변경
- 강감찬 학생 전학
students.get("STU001").setEnglish(92); //STU001의 key값에 접근하여 value를 92로 변경
students.remove("STU002"); //STU002라는 key로 접근하여 제거
'Web Development > Java' 카테고리의 다른 글
예외 처리 - 사용자 정의 예외 (0) | 2022.10.11 |
---|---|
예외 처리 - throws 구문 (0) | 2022.10.11 |
예외처리 try ~ catch ~ finally 구문 (0) | 2022.10.11 |
List Collection (0) | 2022.10.08 |