Language/Java

8.4 Collection Framework - Map 인터페이스

리져니 2021. 7. 24. 21:30

HashMap

키(key)와 값(value)를 묶어서 하나의 데이터(entry)로 저장한다.

해싱(hashing)을 사용하여 많은 데이터를 검색하는데 뛰어난 성능을 보인다.

class Entry{
	Object key;
    Object value;
}

* key: 컬렉션 내의 키들 중에서 유일해야함 (hashmap에서 키로 검색했을때 결과가 단 하나여야함)

* value: 데이터 중복을 허용함

 

한정된 범위 내에 있는 순차적인 값들의 빈도수는 배열을 이용하지만, 한정되지 않은 범위늬 비순차적인 값들의 빈도수는 HashMap을 이용해서 구할 수 있다.

 

HashMap() HashMap객체를 생성
HashMap(int capacity) 지정된 값을 초기용량으로 하는 HashMap 객체 생성
HashMap(int capacity, float loadFactor) 지정된 초지용령과 loas Factor의 hashMap객체 생성
HashMap(Map m) 지정된 Map의 모든 요소를 포함하는 HashMap 생성
void clear() HashMap에 저장된 모든 객체 제거
Object clone() 현재 HashMap을 복제해서 반환
boolean containsKey(Object Key) HashMap에 Key가 포함되어 있는지 알려줌
boolean containsValue(Object value) HashMap에 Value가 포함되어 있는지 알려줌
Set entrySet() HashMap에 저장된 모든 키가 저장된 Set을 반환
Object get(Object Key) Key의 객체를 반환
boolean isEmpty() HashMap이 비어있는지 알려줌
Set keySet() HashMap에 저장된 모든 키의 Set을 반환
Object put(Object key, Object value) key와 value을 HashMap에 저장
Object remove(Object key) HashMap에 저장된 키로 객체 제거
Object replace(Object key, Object value) 키의 값을 저장된 객체로 대체
int size() HashMap에 저장된 요소의 개수 반환

 

로그인 코드 구현

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws IOException {
        HashMap map = new HashMap();
        map.put("abcd", "1234");
        map.put("john123", "1234");
        map.put("july7", "7777");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while(true){
            System.out.println("input Id and password");
            System.out.println("id: ");
            String id = br.readLine();

            System.out.println("password: ");
            String psw = br.readLine();

            if(!map.containsKey(id)){
                System.out.println("not existed id");
                continue;
            }else if(!(map.get(id)).equals(psw)){
                System.out.println("wrong password. try again");
            }else {
                System.out.println("login success");
                break;
            }
        }
    }
}

 

TreeMap

이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다.

검색과 정렬에 적합하다.

검색에 관한 대부분의 경우에서 HashMap이 TreeMap보다 뛰어나지만 범위 검색이나 정렬이 필요한 경우에는 TreeMap이 좋다.

TreeMap() TreeMap 객체 생성
TreeMap(Comparator c) Cmparator를 기준으로 정렬하는 TreeMap객체 생성
TreeMap(Map m) Map에 저장된 모든 요소를 포함하는 TreeMap 생성
TreeMap(SortedMap m) SortedMap에 저장된 모든 요소를 포함하는 TreeMap생성
Map.Entry ceilingEntry(Object key) key와 일치하거나 큰 것중 제일 작은 것의 키와 값의 쌍(Map.Entry)을 반환
Object ceilingKey(Object key) key와 일치하거나 큰 것중 제일 작은 것의 키를 반환
boolean containsKey(Object key) TreeMap에 key가 포함되어 있는지 알려줌
boolean containsValue(Object value) TreeMap에 value가 포함되어 있는지 알려줌
NavigableSet descendingKeySet() TreeMap에 저장된 키를 역순으로 정렬해서 NavigableSet에 담아서 반환
Map.Entry firstEntry() TreeMap에 저장된 첫번째 키와 값의 쌍(Map.Entry)를 반환
Object firstKey() TreeMap에 저장된 첫번째 키를 반환
Map.Entry floorEntry(Object key) key와 일치하거나 작은것 중에서 제일 큰 키의 쌍(Map.Entry)를 반환
Object floorEntry(Object key) key와 일치하거나 작은것 중에서 제일 큰 키를 반환
Object get(Object key) key와 값을 반환
SortedMap headMap(Object toKey) TreeMap에 저장된 첫번째 요소부터 지정된 범위에 속한 모든 요소가 담긴 SortedMap을 반환
Object put(Object key, Object value) key와 value를 TreeMap에 저장
Object remove(Object key) TreeMap에 저장된 key의 모든 값 객체를 제거
Object replace(Object k, Object v) 기존의 k의 값을 지정된 v로 변경
SortedMap subMap(Object fromKey, Object key) 지정된 두 개의 키 사이에 있는 모든 요소들이 담긴 SortedMap반환
Collection values() TreeMap에 저장된 모든 값을 컬렉션의 형태로 반환

 

Properties

HashMap의 구버전인 Hashtable을 상속받아 구현한 것으로, Hashtable은 키와 값을 Object형태로 저장하는데 비해 Properties는 String형태로 저장하는 보다 단순화된 컬렉셩 클래스이다.

주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며, 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다.

때문에 간단한 입출력은 Properties를 활용하면 쉽게 해결될수 있다.

Properties() Properties객체를 생성
Properties(Properties defaults) Properties에 저장된 목록을 가진 Properties객체를 생성
String getProperty(String key) key의 값을 반환
String getProperty(String key, String defaultValue) key의 값을 반환, 키를 못찾으면 defaultValue를 반환
void list(PrintStream out) PrintStream에 저장된 목록 출력
void list(PrintWriter out) PrintWriter에 저장된 목록 출력
void load(InputStream inStream) InputStream으로부터 목록을 읽어서 저장
void load(Reader reader) Reader로부터 목록을 읽어서 저장
void loadFromXML(InputStream in) InputStream으로부터 XML문서를 읽어서 xml문서에 저장된 목록을 읽어서 담는다
Enumeration propertyNames() 목론의 모든 key가 담긴 Enumeration을 반환
void store(OutputStream out, String comments) 저장된 목록을 OutputStream에 출력(저장)한다.
comments는 목록에 대한 주석으로 저장됨
void store(Wirter wirter, String comments) 저장된 목록을 Writer에 출력
Set StringPropertyNames() Properties에 저장되어 있는 모든 키를 Set에 담아서 반환

 

properties의 기본 메서드를 사용하여 저장하고 읽어오는 코드 구현

import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();

        prop.setProperty("timeout", "30");
        prop.setProperty("language", "kr");
        prop.setProperty("size", "10");
        prop.setProperty("capacity","10");

        // properties가 구버전 이기 때문에 Iterator대신 Enumeration 사용
        Enumeration e = prop.propertyNames(); 
        
        while(e.hasMoreElements()){
            String element = (String) e.nextElement();
            System.out.println(element + "=" + prop.getProperty(element));
        }
        System.out.println();
        prop.setProperty("size","20");
        System.out.println("size= "+ prop.getProperty("size"));
        System.out.println("capacity= " + prop.getProperty("capacity", "20"));
        System.out.println("loadfactor= " + prop.getProperty("loadfactor", "0.75"));
        System.out.println(prop);
        prop.list(System.out);

    }

실행 결과

properties는 hashtable을 상속받아 구현한 것이라 Map의 특성상 저장순서를 유지하지 않기 때문에 예제의 결과에 출력된 순서가 저장순서와는 무관하다.

 

728x90