Self-study/자바

[Java] HashMap

Munyoung 2024. 1. 2. 14:44

1. HashMap / Hashtable - 순서 X, 중복(키 x, 값O)

1) 특징

- Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장 

- HashMap(동기화 X)은 Hashtable(동기화 O)의 신버전 

- 예를 들면, id랑 pwd 

- 순서를 유지하려면 LinkedHashMap 클래스를 사용하면 됨. (연결하면 순서가 생기기 때문에) 

 

2) key and value

- Hashing 기법으로 데이터를 저장, 데이터가 많아도 검색이 빠르다는 특징을 가짐. 

- Key: 컬렉션 내의 key 중에서 유일해야 한다. 

- Value: 키와 달리 데이터의 중복을 허용함. 

HashMap map = new HashMap(); 
map.put("myid", "1234");
map.put("myid1", "1111");
map.put("myid2", "1234");
map.put("myid", "12345");

- 똑같은 key가 두개있으면 마지막 value가 저장된다. 즉 위의 예시를 보면 처음엔 1234가 저장됐다가 12345로 바뀜. (주의)

public class HashMap extends AbstractMap 
					implements Map, Cloneable, Serializable{
     transient Entry[] table; 
     ...
     static class Entry implements Map.Entry{
     	final Object key; 
        Object value; 
        ...
        }
}

//객체지향적인 코드 
Entry[] table; 
class Entry(
	Object key; 
    Object value; 
}

//비객체지향적인 코드
Object[] key; 
Object[] value;

- Entry[] table 사용해서 Key와 Value 한 쌍. 이렇게 하는 것이 더 객체지향적인 코드임. 

 

3) Hashing

- 해쉬함수로 해쉬테이블에 데이터를 저장하고 검색하는 것. 

- hashtable : 배열과 링크드 리스트가 조합된 형태 

- 배열: 접근성 / 링크드리스트: 변경유리 : 이들의 장점을 활용한 것. 

- 해쉬함수의 성능이 매우 중요함. Object.hash()를 사용하면 됨. 

- Hashtable, HashMap, HashSet 사용하면 됨. 

 

4) 해시테이블에 저장된 데이터를 가져오는 과정. 

  • 키로  해시함수를 호출해서 해시코드를 얻는다. 
  • 해시코드(해시함수의 반환값)에 대응하는 링크드리스트를 배열에서 찾는다. 
  • 링크드리스트에서 키와 일치하는 데이터를 찾는다.

※해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야한다. 

서로 다른 키일지라도 같은 값의 해시코드를 반환할 수 있다. 

2. HashMap 주요 메서드 

1) 생성자: 해시테이블의 내용을 저장 = 배열 + 링크드리스트 

HashMap() 

HashMap(int initialCapacity) : 배열 초기용량 

HashMap(int initialCapacity, float laodFactor) 

HashMap(Map m)

 

2)메서드

Obejct put(Object key, Object value) : 키와 값 추가 

void putAll(Map m) : map에 모든게 저장

Object remove(Object key) : 삭제

Object replace(Object key, Object value) : 변경

boolean replace(Object key, Object oldValue, Object newValue) : 변경 

 

- Hashmap에 저장된 키와 값 가져오는 것 

Set entrySet() : 키와 값 쌍들로 구성된 set을 얻을 수 있음

Set keySet() : 키 값만 가져옴

Collection values() : value 만 가져옴 

 

Object get(Object key) : key에 해당하는 value 반환 

Object getOrDefault(Object key, Object defaultValue) : key가 없을 때, 디폴트 밸류 반환

boolean containsKey(Object key) : key가 있는지의 여부

boolean containsValue(Object value) : value가 있는지의 여부 

 

int size() : 사이즈 확인

boolean isEmpty() : 비었는지 확인

void clear() : 지우기

Object clone() : 복제 

3. TreeMap 

- 범위 검색과 정렬에 유리한 컬렉션 클래스

- HashMap보다 데이터추가, 삭제에 시간이 더 걸림. 

'Self-study > 자바' 카테고리의 다른 글

[자바/Java] overloading  (0) 2023.09.15
[자바/Java] Method(메서드)/ Return / Call Stack  (0) 2023.09.15
[자바/Java] 변수(Variable)  (0) 2023.09.15
[자바/Java] 클래스와 객체  (0) 2023.09.09