[Java] HashMap

SeongWon Oh·2021년 8월 20일
0

Java

목록 보기
29/39
post-thumbnail

Map<K, V>

  • Collectio interface와 다르게 key-value의 쌍으로 이루어지는 객체를 저장한다.

  • 객체들 간의 순서가 없다.

  • 객체들의 Key는 중복을 허용하지 않지만 value는 중복을 허용한다.

  • 쌍으로 이루어진 객체를 관리하는데 사용하는 메서드들이 선언되어 있다.

  • HashTable, HashMap, Properties, TreeMap 등이 있다.


HashMap <K, V> class

  • Map collection class중에서 가장 많이 사용되는 클래스 중 하나이다.

  • JDK1.2부터 제공되었다.

  • Hash Algorithm을 사용하여 검색속도가 매우 빠르다.

  • 검색을 위한 자료구조로 Key를 이용하여 값을 저장하고 key를 지정하여 값을 꺼내온다.

  • 중복된 Key값으로 데이터를 넣으면 기존 데이터가 업데이트된다.

  • HashMap은 저장공간보다 값이 추가로 들어오면 List처럼 저장공간을 추가로 늘린다. 하지만 List처럼 저장공간을 한칸씩 늘리지 않고 2배로 늘려서 과부하가 발생할 수 있다.
    초기에 저장할 데이터 개수를 알면 Map의 초기 크기를 지정해주는 것이 좋다.


HashMap의 주요 Method


HashMap 선언

HashMap<String,String> map1 = new HashMap<String,String>();//HashMap생성
HashMap<String,String> map2 = new HashMap<>();//new에서 타입 파라미터 생략가능
HashMap<String,String> map3 = new HashMap<>(map1);//map1의 모든 값을 가진 HashMap생성
HashMap<String,String> map4 = new HashMap<>(10);//초기 용량(capacity)지정
HashMap<String,String> map5 = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정
HashMap<String,String> map6 = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

값 삭제

map.remove(1); //key값 1 제거, 괄호에는 Key값 입력
map.clear(); //모든 값 제거

👨🏻‍💻 Example Code1

HashMap<String, Integer> hm = new HashMap<String, Integer>();

// put() 메소드를 이용한 요소의 저장
hm.put("삼십", 30);
hm.put("십", 10);
hm.put("사십", 40);
hm.put("이십", 20);

// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + hm.keySet());
for (String key : hm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}

// remove() 메소드를 이용한 요소의 제거
hm.remove("사십");

// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<String> keys = hm.keySet().iterator();
while (keys.hasNext()) {
    String key = keys.next();
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}

// replace() 메소드를 이용한 요소의 수정
hm.replace("이십", 200); 

for (String key : hm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}
 
// size() 메소드를 이용한 요소의 총 개수
System.out.println("맵의 크기 : " + hm.size());

Result
맵에 저장된 키들의 집합 : [이십, 삼십, 사십, 십]
키 : 이십, 값 : 20
키 : 삼십, 값 : 30
키 : 사십, 값 : 40
키 : 십, 값 : 10

키 : 이십, 값 : 20
키 : 삼십, 값 : 30
키 : 십, 값 : 10

키 : 이십, 값 : 200
키 : 삼십, 값 : 30
키 : 십, 값 : 10

맵의 크기 : 3


👨🏻‍💻 Example Code2

※Member class는 HashSet 게시글의 코드와 동일

MemberHashMap.java

package ch14;

import java.util.HashMap;
import java.util.Iterator;

public class MemberHashMap {
	private HashMap<Integer, Member> hashMap;
	// key가 Integer타입, value가 Member타입
	
	public MemberHashMap() {
		hashMap = new HashMap<>();
	}
	
	public void addMember(Member member) {
		//값을 넣을때는 <key, value>를 put, 받아올때는 key를 기반으로 get
		hashMap.put(member.getMemberId(), member);
	}
	
	public boolean removeMember(int memberId){
		
		if(hashMap.containsKey(memberId)){
			hashMap.remove(memberId);
			return true;
		}
		
		System.out.println(memberId + "가 존재하지 않습니다");
		return false;
	}
	
	public void showAllMember(){
		// keySet을 하면 key들이 set의 형식으로 return 된다.
		// values를 하면 value들이 return
		Iterator<Integer> ir = hashMap.keySet().iterator();
		while (ir.hasNext()){
			int key = ir.next();
			Member member = hashMap.get(key);
			System.out.println(member);
		}	
		System.out.println();
	}

}

MemberHashMap.java

package ch14;

public class MemberHashMapTest {

	public static void main(String[] args) {

		MemberHashMap memberHashMap = new MemberHashMap();
		
		
		Member memberLee = new Member(1001, "이순신");
		Member memberKim = new Member(1002, "김유신");
		Member memberKang = new Member(1003, "강감찬");
		Member memberHong = new Member(1004, "홍길동");
		
		memberHashMap.addMember(memberLee);
		memberHashMap.addMember(memberKim);
		memberHashMap.addMember(memberKang);
		memberHashMap.addMember(memberHong);
		
		memberHashMap.showAllMember();
		
		memberHashMap.removeMember(1004);
		memberHashMap.showAllMember();
	}
}



Reference

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글