Map컬렉션

윤재열·2022년 1월 22일
0

Java

목록 보기
42/71
post-custom-banner

Map컬렉션

Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다
Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가집니다.
여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다.

  • Entry는 Map인터페이스 내부에 선언된 중첩 인터페이스 입니다. 여기서 키와 값은 모두 객체입니다.

Map인터페이스의 특징

  1. 요소의 저장 순서를 유지하지 않습니다.
  2. 키는 중복을 허용하지 않지만,값은 중복을 허용합니다.
    (만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체됩니다.)

기능 메서드

  • 객체 추가
    -V put(K key, V value) : 주어진 키로 값을 저장합니다. 새로운 키일 경우 null을 리턴하고,동일한 키가 있을경우 값을 대체하고 이전 값을 리턴합니다.

  • 객체 검색
    -boolean containsKey(Object key) : 주어진 키가 있는가? 여부를 확인
    -boolean containsValue(Object value) : 주어진 값이 있는가? 여부를 확인
    -Set<Map.Entry<K,V>> entrySet() : 키와 값을 쌍으로 구성된 모든 Map.Entry객체를 Set에 담아서 리턴합니다.
    -V get(Object key) : 주어진 키가 있는 값을 리턴합니다.
    -boolean isEmpty() : 컬렉션이 비어있는가? 여부를 확인
    -Set keySet() : 모든 키를 Set에 담아서 리턴한다.
    -int size() : 저장된 키의 총 수를 리턴합니다.
    -Collecion values() : 저장된 모든 값을 Collection에 담아서 리턴한다.

  • 객체 삭제
    -void clear() : 모든 Map.Entry(키와 값)을 삭제합니다.
    -V remove(Object key) : 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴합니다.

HashMap<K,V>클래스

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

  • HashMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없습니다.
    하지만 같은 값을 다른 키로 저장하는 것은 가능합니다.

다음 예제는 여러 HashMap 메서드를 이용하여 맵을 생성하고 조작하는 예제입니다.

package 컬렉션프레임워크;
import java.util.*;

public class HashMapExample1 {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
// put() 메소드를 이용한 요소의 저장
        hm.put("삼십", 30);
        hm.put("십", 10);
        hm.put("사십", 40);
        hm.put("이십", 20);
// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
        System.out.println("맵에 저장된 키들의 집합 : " + hm.keySet());
        System.out.println();
        for (String key : hm.keySet()) {
            System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
        }
        System.out.println();
// remove() 메소드를 이용한 요소의 제거
        hm.remove("사십");
// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
        Iterator<String> keys = hm.keySet().iterator();
        while (keys.hasNext()) {
            String key = keys.next();
            System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
        }
        System.out.println();
// replace() 메소드를 이용한 요소의 수정
        hm.replace("이십", 200);
        for (String key : hm.keySet()) {
            System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
        }
        System.out.println();
// size() 메소드를 이용한 요소의 총 개수
        System.out.println("맵의 크기 : " + hm.size());
    }
}

HashTable

Hashtable 클래스는 JDK 1.0부터 사용해 온 HashMap 클래스와 같은 동작을 하는 클래스입니다.
따라서 Hashtable 클래스에서 사용할 수 있는 메소드는 HashMap 클래스에서 사용할 수 있는 메소드와 거의 같습니다.

package 컬렉션프레임워크;
import java.util.*;

public class HashTableExample {
    public static void main(String[] args) {
        Map<String,String> map = new Hashtable<>();

        map.put("spring","12");
        map.put("summer","123");
        map.put("fall","1234");
        map.put("winter","12345");

        Scanner sc = new Scanner(System.in);

        while(true){
            System.out.println("아이디와 비밀번호를 입력해주세요.");
            System.out.print("아이디: ");
            String id =sc.next();   //키보드로 입력한 아이디를 얻음
            System.out.println("비밀번호: ");
            String password =sc.next();
            System.out.println();

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

        }
    }
}

profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글