컬렉션 프레임워크 06 Map인터페이스
개발에 소요되는 시간을 절약하고 최적화된 라이브러리 중 Collection 인터페이스와 Map 인터페이스로 구성된다. 라고 이전 게시물에서 말한 바 있다. 이번에는 Collection인터페이스가 아닌 Map 인터페이스에 대해 알아보자.
Map인터페이스는 key-value 쌍을 가지는 객체를 관리하는데 필요한 메서드가 정의되어있다. 여기서 key 는 중복될 수 없으며 검색을 위한 자료구조로 주로 사용된다.
key를 이용하여 값을 저장하거나 검색,삭제 할 때 사용하면 편리하며 key가 되는 객체는 그 유일성을 알기위해 equals(),hashCode() 를 재정의 해주어야한다.
Map에는 두가지 클래스가 있는데 하나는 HashMap 클래스이고 또 다른 하나는 TreeMap클래스이다.
HashMap은 Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용하는 클래스이다. Pair자료를 쉽고 빠르게 관리 할 수 있다.
TreeMap 클래스는 key 객체를 정렬하여 key-value를 pair로 관리하는 클래스다. key에 사용되는 클래스에 Comparable,Comparator 인터페이스를 구현해주어야 한다. java에 많은 클래스들은 이미 Comparable이 구현되어있다. 구현된 클래스(Integer,String등 )를 key로 사용하는 경우는 구현할 필요가없다.
Member 클래스
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
|
public class Member {
private int memberId;
private String memberName;
public Member() {}
public Member(int memberId, String memberName) {
this.memberId = memberId;
this.memberName = memberName;
}
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String toString() {
return memberName + "회원님의 아이디는 " + memberId + "입니다.";
}
}
|
cs |
HashMap 예제코드
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
32
33
34
35
36
37
38
39
40
41
|
import java.util.HashMap;
import java.util.Iterator;
public class MemberHashMap {
private HashMap<Integer, Member> hashMap;
public MemberHashMap() {
hashMap = new HashMap<Integer, Member>();
}
public void addMember(Member member) {
hashMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId) {
if ( hashMap.containsKey(memberId)) {
hashMap.remove(memberId);
return true;
}
System.out.println("not exists");
return false;
}
public void showAllMember() {
Iterator<Integer> ir = hashMap.keySet().iterator();
while( ir.hasNext()) {
int key = ir.next();
Member member = hashMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class MemberHashMapTest {
public static void main(String[] args) {
MemberHashMap manager = new MemberHashMap();
Member memberLee = new Member(100, "Lee");
Member memberKim = new Member(200, "Kim");
Member memberPark = new Member(300, "Park");
Member memberPark2 = new Member(300, "Park");
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
manager.addMember(memberPark2);
//Integer에 이미 equals가 구현되어있어서 같은 데이터를 구분가능 따라서 저장안됨
manager.showAllMember();
manager.removeMember(200);
manager.showAllMember();
}
}
|
cs |
출력결과를 보면 정렬되어 출력된 것 처럼보이지만 사실 정렬된 것은 아니다.
TreeMap 예제코드
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
32
33
34
35
36
37
38
39
|
import java.util.Iterator;
import java.util.TreeMap;
public class MemberTreeMap {
private TreeMap<Integer, Member> treeMap;
public MemberTreeMap() {
treeMap = new TreeMap<Integer, Member>();
}
public void addMember(Member member) {
treeMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId) {
if ( treeMap.containsKey(memberId)) {
treeMap.remove(memberId);
return true;
}
System.out.println("not exists");
return false;
}
public void showAllMember() {
Iterator<Integer> ir = treeMap.keySet().iterator();
while( ir.hasNext()) {
int key = ir.next();
Member member = treeMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
|
cs |
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
|
public class MemberTreeMapTest {
public static void main(String[] args) {
MemberTreeMap manager = new MemberTreeMap();
Member memberPark = new Member(300, "Park");
Member memberLee = new Member(100, "Lee");
Member memberKim = new Member(200, "Kim");
Member memberPark2 = new Member(400, "Park");
manager.addMember(memberPark);
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark2);
//Integer에 이미 equals가 구현되어있어서 같은 데이터를 구분가능 따라서 저장안됨
//TreeMap이고 Integer는 Comparable이 구현되어있으므로 정렬이되어서 출력된다.`
manager.showAllMember();
manager.removeMember(200);
manager.showAllMember();
}
}
|
cs |
출력결과를 보면 addMember를 크기순서와 다르게 넣어줬지만 정렬되어 나오는 것을 알수있다.