티스토리 뷰

728x90
반응형

Map<K, V>

 

Map 인터페이스는 Collection 인터페이스와는 다른 저장방식을 가진다.

 

키(key)와 값(value)을 하나의 쌍으로 저장하는 방식(key-value 방식)이 그것인데,

 

여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 한다고 할 수 있다.

 

여기서 중요한 사실은 키는 중복저장될 수 없지만 값은 중복저장이 가능하다는 점이다.

 

만약 기존의 키와 같은 키에 다른 값을 저장하면, 값이 대체되는 효과가 발생한다.

 

Map 인터페이스를 구현한 클래스는 HashMap<E>, HashTable<E>, TreeMap<E>, SortedMap<E>등이 있고,

 

공통으로 사용할 수 있는 메서드는 다음과 같다.

 

 


HashMap<E>

 

HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클래스이다.

 

HashMap은 Hash 함수를 통해 값을 저장하며, HashSet과 비슷하게

 

해시 알고리즘(Hash Algorithm)을 사용하여 데이터 검색 속도가 매우 빠르다.

 

바로 예를 살펴보자

import java.util.*;

public class HashMapExample {
    public static void main(String[] args) {

        // HashMap 생성
        HashMap<String, Integer> map = new HashMap<>();

        // Entry 객체 저장
        map.put("피카츄", 85);
        map.put("꼬부기", 95);
        map.put("야도란", 75);
        map.put("파이리", 65);
        map.put("피존투", 15);

        // 저장된 총 Entry 수 얻기
        System.out.println("총 entry 수: " + map.size());

        // 객체 찾기
        System.out.println("파이리 : " + map.get("파이리"));

        // key를 요소로 가지는 Set을 생성 -> 아래에서 순회하기 위해 필요합니다. 
        Set<String> keySet = map.keySet();

        // keySet을 순회하면서 value를 읽어옵니다. 
        Iterator<String> keyIterator = keySet.iterator();
        while(keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = map.get(key);
            System.out.println(key + " : " + value);
        }

        // 객체 삭제
        map.remove("피존투");

        System.out.println("총 entry 수: " + map.size());

        // Entry 객체를 요소로 가지는 Set을 생성 -> 아래에서 순회하기 위해 필요합니다. 
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

        // entrySet을 순회하면서 value를 읽어옵니다. 
        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);
        }

        // 객체 전체 삭제
        map.clear();
    }
}

HashMap을 생성할 때는 키와 값의 타입을 따로 지정해주어야 하는 것을 볼 수 있다.

 


HashTable

 

HashTable 클래스는 위에 살펴본 HashMap과 같은 동작을 하는 클래스이다.

 

실제로 내부 구조가 같으며, 사용 방법도 유사한데, HashMap을 HashTable의 

 

새로운 버전이라고 이해해도 된다.

 

예는 다음과 같은데, 간단한 로그인 기능을 구현해본 코드이다.

import java.util.*;

public class HashTableExample {
    public static void main(String[] args){

        HashTable<String, String> map = new Hashtable<String, String>();

        map.put("Spring", "345");
        map.put("Summer", "678");
        map.put("Fall", "91011");
        map.put("Winter", "1212");

        System.out.println(map);

        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("아이디와 비밀번호를 입력해 주세요");
            System.out.println("아이디");
            String id = scanner.nextLine();

            System.out.println("비밀번호");
            String password = scanner.nextLine();

            if (map.containsKey(id)) {
                if (map.get(id).equals(password)) {
                    System.out.println("로그인 되었습니다.");
                    break;
                }
                else System.out.println("비밀번호가 일치하지 않습니다. ");
            }
            else System.out.println("입력하신 아이디가 존재하지 않습니다.");
        }
    }
}

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
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
글 보관함