Web Development/Java

HashMap

seongduck 2022. 10. 8. 10:43
  • 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