일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 보조 스트림
- FileInputStream
- 문자 단위 스트림
- 변수
- SSR
- node.js
- 바이트 단위 스트림
- 백엔드
- 상속
- exception
- 코린이
- 졸리다
- 배열
- 코딩
- 자료형
- 인터페이스
- try-catch
- 새벽공부
- 인스턴스
- throws
- 다형성
- ArrayList
- MPA
- 초보개발자
- 메서드
- 예외 처리
- 개발자
- Java
- 자바
- 파이팅
- Today
- Total
SHUSTORY
12-5 Map 인터페이스 본문
Map 인터페이스
Map 인터페이스는 자료를 쌍으로 관리하는 데 필요한 메서드가 정의되어 있다.
key-value 쌍으로 이루어진 객체의 key 값은 유일하며 value 값은 중복될 수 있다.
Map 인터페이스를 구현한 클래스는 내부적으로 해시 알고리즘에 의해 구현되어 있다.
HashMap 클래스
HashMap은 Map 인터페이스를 구현한 클래스 중 가장 많이 사용한다.
HashMap에서 자료를 관리하는 방식은 해시 방식으로, 해시 방식의 자료를 저장하는 공간을 해시 테이블이라고 한다.
key 값이 정해지면 그에 대응하는 해시 테이블의 저장 위치가 정해지는데 이런 위치를 계산하는 함수가 '해시 함수'이다.
해시 함수를 어떻게 만드느냐는 key 값 특성이나 개발 프로그램 성격에 따라 다를 수 있다.
그런데 서로 다른 key 값에 같은 index가 반환되는 충돌이 발생하는 경우가 있기 때문에 해시 테이블에 데이터를
꽉 채우지 않고 적정 수준이 되면 테이블을 확장해 충돌 발생 확률을 낮춘다.
또한 Map 인터페이스에서 사용하는 key 값은 중복될 수 없으므로 equals( ) 메서드와 hashcode( ) 메서드를 재정의하는 것이 좋다.
HashMap을 활용해 회원 관리 프로그램 구현하기
HashMap을 활용하여 key 값은 회원 아이디, value는 회원 클래스로 구현해보자.
key 값은 회원 아이디, value는 회원 클래스이다.
Map 인터페이스는 모든 자료를 한 번에 순회할 수 있는 방법이 없기 때문에 key 값을 먼저 가져온 뒤 그에 해당하는 value를 찾아야 한다. hashMap.keySet( ) 메서드를 호출하면 모든 key 값이 Set 객체로 반환된다.
반환된 Set 객체에 iterator( ) 메서드를 호출하면 key를 순회할 수 있는 Iterator가 반환된다.
그리고 모든 key 값을 하나씩 순회하면서 get( ) 메서드를 사용하여 해당 value 값을 가져온다.
이 외에 HashMap의 values( ) 메서드를 사용하면 key 값 없이 모든 value 값을 Collection 자료형으로 반환해 준다.
key는 중복될 수 없으므로 반환형이 Set이고, value는 중복 가능하므로 Collection이 된다.
다음은 예제01의 테스트코드이다.
이처럼 쌍으로 된 자료는 HashMap을 사용하여 관리하면 편리하다.
HashMap과 Hashtable 클래스는 모두 쌍으로 이루어진 자료를 관리하는 데 사용된다.
Vector 클래스에서 설명했듯이 멀티스레드 환경이 아니라면, Hashtable보다는 HashMap을 사용하는 것을 권장한다.
TreeMap 클래스
Map 인터페이스를 구현한 클래스 중 key 값으로 자료를 정렬하려면 TreeMap을 사용할 수 있다.
TreeMap은 TreeSet와 마찬가지로 이진 검색 트리로 구현되었다.
key 값으로 정렬하므로 key 값에 해당하는 클래스에 Comparable이나 Comparator 인터페이스를 구현해야 한다.
참고로 회원 관리 프로그램에서 사용하는 key 값인 회원 아이디는 Integer 형으로,
JavaDoc에서 Integer 클래스를 보면 이미 Comparable 인터페이스가 구현되어 있기 때문에
예제03에서는 따로 Comparable 인터페이스를 구현하지 않고 회원 관리 클래스를 구현해보도록 하자.
자바의 컬렉션 프레임워크는 자료 구조를 최적화하여 구현했고, 다양한 메서드도 구현되어 있다.
이러한 클래스의 특성을 잘 이해해 두면 프로그램을 만들 때 적절하게 활용할 수 있을 것이다.
'프로그래밍 > JAVA' 카테고리의 다른 글
13-2 람다식 (0) | 2023.03.14 |
---|---|
13-1 내부 클래스 (0) | 2023.03.13 |
12-4 Set 인터페이스 (0) | 2023.03.08 |
12-3 List 인터페이스 (0) | 2023.03.08 |
12-2 컬렉션 프레임워크 (0) | 2023.03.08 |