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 |