컴퓨터공학 💻 도서관📚
Part2. 5-15 쌍(pair)으로 자료를 관리하는 Map 인터페이스를 구현한 클래스와 그 활용 (HashMap 클래스 , TreeMap 클래스) 본문
Part2. 5-15 쌍(pair)으로 자료를 관리하는 Map 인터페이스를 구현한 클래스와 그 활용 (HashMap 클래스 , TreeMap 클래스)
들판속초록풀 2025. 7. 3. 17:07HashMap 클래스 활용하기
- Map 인터페이스를 구현한 클래스
- 가장 많이 사용되는 Map 인터페이스 기반 클래스
- key - value를 쌍으로 관리하는 메서드를 구현함
- 검색을 위한 자료구조
- key를 이용하여 값을 저정하고 key를 이용하여 값을 꺼내오는 방식 -- hash 알고리즘으로 구현 됨
- key가 되는 객체는 중복될 수 없고 객체의 유일성 비교를 위한 equals()와 hashCode() 메서드를 구현해야 함
put( K key, V value ) ( 반환형 : V )
get( Object key ) ( 반환형 : V )
remove( Object key ) ( 반환형 : V )
keySet() : 모든 key를 다 꺼내는 메서드( 반환형 : Set<K> )
values() : 모든 value를 다 꺼내는 메서드( 반환형 : Collection<V> )
containsKey( Object key ) : 이 key에 해당하는 key값을 가지고 있느냐?( 반환형 : boolean )
containsValue( Object value ) : 이 value에 해당하는 value값을 가지고 있느냐?( 반환형 : boolean )
HashTable 은 컬리전(충돌)이 발생할 수 가 있다
HashTable 은 Key 값에 대한 인덱스가 반환이 되는데 다른 Key 값이어도 동일한 인덱스가 반환될 수 가 있다
그런 경우를 컬리전이라고 하는데 컬리전이 자꾸 발생을 하면 해시 테이블을 만드는데 굉장히 어렵다
왜냐하면 컬리전이 자꾸 발생하면 나중에 검색할 때도 컬리전을 계속 따라가면서 검색을 해야 되니까 오버헤드가 생긴다
우리가 해시테이블을 쓰는 이유가 검색을 할 때 들어가는 소요시간이 상수이기를 원하는데
컬리전이 자꾸 발생하면 상수값이 안 된다.
그렇기 때문에 해시테이블을 꽉 차게 쓰지 않는다
자바에서는 로드밸런스가 75% 이어서 전체가 100개라고 가정하면 75개 정도 차있을 때 해시 테이블 뻥튀기를 시킨다
// Member 클래스는 기존과 동일
public class MemberHashMap {
private HashMap<Integer, Member> hashMap; // HashMap 선언
public MemberHashMap()
{
hashMap = new HashMap<Integer, Member>();
}
public void addMember(Member member){
hashMap.put(member.getMemberId(), member); // 추가가 put 메서드
}
public boolean removeMember(int memberId){
if(hashMap.containsKey(memberId)){ // 지금은 컴파일러가 int 변수를 받아도 Integer Object로 자동으로 변환해준다
hashMap.remove(memberId); // 삭제가 remove 메서드
return true;
}
System.out.println(memberId + "가 존재하지 않습니다");
return false;
}
public void showAllMember(){ // 이터레이터 안 쓰고 그냥 HashMap 출력헤도 나온다 (Key, Value 페어로 나온다)
Iterator<Integer> ir = hashMap.keySet().iterator(); // 이터레이터로 순회하고 싶으면 Key로 할지 Value로 할지 두 개중에 하나를 고르면 된다
while (ir.hasNext()){
int key = ir.next();
Member member = hashMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
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();
}
}
TreeMap 클래스
- TreeSet 과 HashMap 을 더한 거라고 보면 된다
HashMap처럼 Key Value 페어로 저장을 하는데 Key에 의해서 정렬이 된다.
그러면 우리가 Key에 해당되는 클래스 쪽에다가 Comparable 이나 Comparator를 구현하면 된다.
integer 나 String 같은 애가 Key가 되면 이미 구현되어 있기 때문에 안 해도 된다.
그런데 그렇지 않은 클래스들, 우리가 만든 클래스들은 Key에 대해서 Comparable 이나 Comparator Interface를
구현해서 Key에 의해서 정렬이 된 Key Vaule 쌍을 얻을 수 있다. - Map 인터페이스를 구현한 클래스이고 key에 대한 정렬을 구현할 수 있음
- key가 되는 클래스에 Comparable이나 Comparator인터페이스를 구현함으로써 key-value 쌍의 자료를 key값 기준으로 정렬하여 관리 할 수 있음
컬렉션 프레임워크 안에는 여기서 소개한 것보다 클래스들이 더 많다. (예 : 우선순위 큐)
그래서 이런 클래스들은 직접 Document를 찾아봐서 실습해보자
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 6-2 람다식(Lambda expression) (0) | 2025.07.06 |
---|---|
Part2. 6-1 여러 내부 클래스의 정의와 유형 (0) | 2025.07.06 |
Part2. 5-14 정렬을 위해 Comparable과 Comparator 인터페이스 구현하기 (TreeSet 클래스) (0) | 2025.06.28 |
Part2. 5-13 중복되지 않게 자료를 관리하는 Set 인터페이스를 구현한 클래스와 그 활용 (HashSet 클래스) (0) | 2025.06.28 |
Part2. 5-12 Collection 요소를 순회하는 Iterator (0) | 2025.06.27 |