자바의 정석 - HashMap

송용준·2023년 5월 6일
0

HashMap과 Hashtable - 순서x, 중복(키x,값O)

  • Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
  • HashMap(동기화x)은 Hashtable(동기화o)의 신버젼

HashMap

  • Map인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지하려면, LinkeHashMap클래스를 사용하면 된다.

TreeMap

  • 범위 검색과 정렬에 유리한 컬렉션 클래스
  • HashMap보다 데이터 추가, 삭제에 시간이 더 걸림

HashMap의 키(key)와 값(value)

  • 해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
  • Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
    키(key) : 유일 값
    값(value) : 중복 허용
    Entry : key,value 한 쌍

해싱(hashing)

  • 해시함수로 해시테이블에 데이터를 저장, 검색 (키를 넣으면 저장위치(index)를 알려줌)
  • 해시테이블은 배열과 링크드 리스트가 조합된 형태

해싱 가져오는 과정

  1. 키를 보고
  2. 해시코드를 알려준다.
  3. 해시코드에 대응하는 링크드리스트를 배열에서 찾는다.
  4. 서로 다른 키여도 같은 해시코드를 반환할 수 있다.

중복 데이터값 갯수 구하기

import java.util.*;

class Java {
	public static void main(String[] args) {
		
		String[] data = {"A","K","A","K","D","K","A","K","K","Z","D"};
		
		HashMap map = new HashMap();
		
		for (int i = 0; i < data.length; i++) {
			if (map.containsKey(data[i])) {
				int value = (int)map.get(data[i]);
				map.put(data[i], value + 1);
			} else {
				map.put(data[i], 1);
			}
		}
		
		Iterator it = map.entrySet().iterator();
		
		while(it.hasNext()) {
			Map.Entry entry = (Map.Entry)it.next();
			int value = (int)entry.getValue();
			System.out.println(entry.getKey() + " : " +  "" + value);
		}
		
	}
}
profile
용용

0개의 댓글