IT/Java

컬렉션 프레임워크 06 Map인터페이스

어센트 2020. 1. 9. 22:20

개발에 소요되는 시간을 절약하고 최적화된 라이브러리 중 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를 크기순서와 다르게 넣어줬지만 정렬되어 나오는 것을 알수있다.