HashMap이란?


Map 인터페이스를 구현한 대표적인 Map 컬렉션



Map이란?


Key와 value으로 구성된 Entry 객체를 저장하는 구조를 가짐(key, value 모두 객체)

키는 중복 저장될 수 없지만 값은 중복 저장 가능

HashMap, HashTable, LinkedHashMap, Properties, TreeMap 등이 있다.



HashMap 특징


HashSet과 마찬가지로 hashcode()와 equals()로 동일한 키 여부를 결정한다.





기본 사용법 코드


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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package map.hashmap;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
public class HashMapExample1 {
    public static void main(String[] args) {
        
        //Map 생성
        Map<String, Integer> map = new HashMap();
        
        
        //객체 저장
        map.put("원빈"50);
        map.put("장동건"70);
        map.put("하하"40);
        
        System.out.println("총 Entity 수 : " + map.size());
        
        //객체 찾기
        System.out.println("하하 : " + map.get("하하"));
        System.out.println();
        
        //하나씩 처리 - ketset()이용
        Set<String> keySet = map.keySet();
        Iterator<String> keyIterator = keySet.iterator();
        while(keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = map.get(key);
            System.out.println(key + " : " + value );
        }
        System.out.println();
        
        //객체 삭제
        map.remove("장동건");
        System.out.println("총 Entry 수 : " + map.size());
        
        //하나씩 처리 - entryset() 이용
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
        
        while(entryIterator.hasNext()) {
            Map.Entry<String, Integer> entry = entryIterator.next();
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + " : " + value );
        }
        System.out.println();
        
        //객체 전체 삭제
        map.clear();
        System.out.println("총 Entry 수 : " + map.size());
    }
}
 
cs



hashcode( )와 eqauls( ) 재정의를 통한 동일한 키 삽입 예제 코드


키로 사용할 객체(hashcode() eqauls() 재정의)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Member {
    private String name;
    private int age;
    
    /*
        get, set 메소드 생략
    */
 
    @Override
    public int hashCode() {
        return name.hashCode() + age; //이름과 나이가 같으면 동일한 해쉬코드
    }
 
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Member) {
            Member member = (Member) obj;
            return member.getName().equals(name) && (member.getAge() == age); //이름과 나이가 같으면 true
        } else {
            return false;
        }
    }
}
cs



이름과 나이가 같은 경우 동일한 키로 판단


1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.HashMap;
import java.util.Map;
import set.hashset.Member;
 
public class HashMapExample2 {
    public static void main(String[] args) {
        Map<Member, String> map = new HashMap();
        map.put(new Member("명수"30), "골드"); //이름과 나이가 같은 Member 키로 저장
        map.put(new Member("명수"30), "골드");
        
        System.out.println("총 Entry 수 : " + map.size()); //1개만 저장된다.
    }
}
cs


+ Recent posts