[Java] Map 컬렉션 - HashMap, TreeMap

Bam·2024년 3월 14일
0

Java

목록 보기
66/98
post-thumbnail

컬렉션 프레임워크의 마지막 컬렉션 Map입니다. Map은 이전에 다룬 List, Set과는 조금 다른 성격을 지니고 있습니다.

Map키-값(key-value) 쌍을 통해 데이터를 저장합니다. 키는 중복을 허용하지 않지만, 값은 중복을 허용하고 있습니다. 따라서 중복된 키를 삽입을 하면 기존 데이터를 삭제하고 새로운 데이터를 삽입하게 됩니다. 이 과정에서 순서가 바뀔수도 있습니다.

역시 Map의 공통적인 메소드들은 이 포스트에서 정리했으므로 클래스에 대해 추가된 메소들과 기본적인 사용법들만 다루겠습니다.


HashMap

HashMap은 키-값 쌍을 Object-Object의 형태로 저장합니다. 일반적으로 키는 탐색의 편의성을 위해서 주로 String 타입으로 저장합니다.

HashMap의 선언은 다음과 같이 선언합니다. 키-값 타입을 타입 파라미터로 받습니다.

HashMap<K, V> 변수명 = new HashMap<K, V>();	//지정된 타입 K, V를 받음
//타입 파라미터를 키는 K, 값은 V로 표기합니다.
HashMap 변수명 = new HashMap();	//모든 타입을 받음

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를 저장
void putAll(Map m)Map m의 모든 요소를 HashMap에 저장
Object remove(Object key)지정된 key의 객체 삭제
int size()HashMap의 크기 반환
Collection values()HashMap의 모든 values를 컬렉션으로 반환
public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> hm = new HashMap<String, Integer>();

        hm.put("가", 1);
        hm.put("나", 2);
        hm.put("다", 3);
        hm.put("라", 4);
        System.out.println("HashMap의 크기: " + hm.size());

        System.out.println("\"다\"의 value: " + hm.get("다"));
    }
}

HashTable

Hashtable동기화를 지원하는 구버전 클래스입니다.

동기화가 필요하지 않은 경우에도 동기화를 수행하여 효율이 낮기 때문에 현재는 동기화와 컬렉션을 따로 수행할 수 있는 HashMap을 사용합니다.

Properties

PropertiesHashtable의 자식 클래스입니다. Hashtable과 동일한 특성을 가졌고 유일한 차이점은 Properties는 키-값을 무조건 String타입으로만 받습니다. 일반적으로 .properties확장자 파일을 읽을 때 사용합니다.


TreeMap

TreeMap이진 탐색 트리를 기반으로 키-값 상의 데이터를 저장하는 컬렉션입니다. 이진 탐색 트리의 장점이 정렬과 검색이므로 해당 기능이 필요할 때 사용합니다.

다만 HashMap도 검색 성능이 상당히 좋은편인데요. 어떤 검색을 하냐에 따라 컬렉션의 선택이 달라집니다. 일반적인 검색에선 대부분 HashMap이 조금 더 뛰어난 성능을 보여줍니다. TreeMap은 범위 검색과 정렬을 이용할 때 더 좋은 성능을 보여줍니다. 원하는 프로그램의 기능에 맞춰서 Map을 사용하시면 됩니다.

TreeMap의 메소드들은 다음과 같습니다.

메소드설명
void clear()TreeMap의 모든 객체를 삭제
Object clone()현재 TreeMap을 복사해서 반환
boolean containsKey(Object key)TreeMap에 일치하는 key가 있는지 여부를 반환
boolean containsValue(Object value)TreeMap에 일치하는 value가 있는지 여부를 반환
Set entrySet()TreeMap의 키-값 쌍(엔트리)을 객체 형태로 Set에 저장해서 반환
Object firstKey()TreeMap의 첫번째 요소의 키를 반환
Object get(Object key)지정된 key의 값을 반환
SortedMap headMap(Object toKey)첫번째 요소부터 to이전까지의 요소를 SortedMap으로 반환
boolean isEmpty()TreeMap이 비었는지 여부를 반환
Set keySet()TreeMap의 모든 키가 저장된 Set을 반환
Object lastKey()TreeMap의 마지막 키를 반환
Object put(Object key, Object value)전달된 key-value를 저장
void putAll(Map m)Map m의 모든 요소를 TreeMap에 저장
Object remove(Object key)지정된 key의 객체 삭제
int size()HashMap의 크기 반환
SortedMap subMap(Object fromKey, Object tokey)from에서 to 사이의 요소들이 담긴 Map 반환
SortedMap tailMap(Object fromKey)지정된 from부터 끝까지의 요소들이 담긴 Map 반환
Collection values()TreeMap의 모든 values를 컬렉션으로 반환
public class Main {
    public static void main(String[] args) {
        TreeMap<String, Integer> tm = new TreeMap<String, Integer>();

        tm.put("가", 1);
        tm.put("나", 2);
        tm.put("다", 3);
        tm.put("라", 4);
        System.out.println("TreeMap의 크기: " + tm.size());

        System.out.println("\"다\"의 value: " + tm.get("다"));
    }
}

0개의 댓글