Map 컬렉션 / 검색기능을 강화시킨 컬렉션

2019. 8. 14. 15:19IT/Java

Map 컬렉션

Map 컬렉션의 특징 및 주요 메소드

  • 특징

    • 키(Key)와 값(value)으로 구성된 Map.Entry 객체를 저장하는 구조
    • 키와 값은 모두 객체
    • 키는 중복될 수 없지만 값은 중복 저장이 가능하다.

 

  • 구현 클래스

    • HashMap
    • HashTable
    • LinkedHashMap
    • Properties
    • TreeMap

 

  • 주요 메소드

    기능 메소드 설명
    객체 추가 V put(K key, V value) 주어진 키와 값을 추가, 저장이 되면 값을 리턴
    객체 검색 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() 저장된 키의 총 수를 리턴
      Collection values() 저장된 모든 값 Collection 에 담아서 리턴
    객체 삭제 void clear() 모든 Map.Entry(키와 값)를 삭제
      V remove(Object key) 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴
  • 객체 추가, 찾기, 삭제

    Map<String,Integer> map = ...;
    map.put("학생1",30);
    int score = map.get("학생");
    map.remove("학생1");
  • 전체 객체를 대상으로 반복해서 얻기

    Map<K, V> map = ~;
    Set<K> keySet = map.keySet();
    Iterator<K> keyIterator = keySet.iterator();
    while(keyIterator.hasNext()) {
        K key = keyIterator.next();
        V value = map.get(key);
    }
  Set<Map.Entry<K,V>> entrySet = map.entrySet();
  Iterator <Map.Entry<K,V>> entryIterator = entrySet.iterator();
  while(entryIterator.hasNext()) {
      Map.Entry<K,V> entry = entryIterator.next();
      K key = entry.getKey();
      V value = entry.getValue();
  }

 

HashMap

Map<K, V> map = new HashMap<K, V>();
  • 특징

    • 키 객체는 hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야한다.

    • 키 타입은 String을 많이 사용한다.

      String은 문자열이 같을 경우 동등 객체가 될 수 있도록 hashCode()와 equals()메소드가 재정의 되어있기 때문

 

Hashtable

Map<K, V> map = new Hashtable<K, V>();
  • 특징

    • 키 객체는 hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야한다.
    • Hashtable은 스레드 동기화(synchronization)가 되어 있기 때문에 복수의 스레드가 동시에 접근해서 객체를 추가, 삭제하더라도 스레드에 안전(thread safe)하다

 

Properties

  • 특징

    • 키와 값을 String 타입으로 제한한 Map 컬렉션이다.
    • Properties는 프로퍼티(~.properties) 파일을 읽어 들일 때 주로 사용한다.
  • 프로퍼티 파일

    • 옵션 정보, 데이터베이스 연결 정보, 국제화(다국어) 정보를 기록한 텍스트 파일로 활용
    • 애플리케이션에서 주로 변경이 잦은 문자열을 저장해서 유지 보수를 편리하게 만들어줌
    • 키와 값이 = 기호로 연결되어 있는 텍스트 파일로 ISO 8859-1문자셋으로 저장
    • 한글은 유니코드로 변환되어 저장

 

검색 기능을 강화시킨 컬렉션

  • TreeSet

  • TreeMap

 

이진 트리 구조

  • 부모 노드와 자식 노드로 구성

    ​     20

    10       30

    • 왼쪽 자식 노드 : 부모보다 적은 값
    • 오른쪽 자식 노드 : 부모보다 큰 값
  • 정렬이 쉬움

    • 올림 차순 : [왼쪽 노드 -> 부모 노드 -> 오른쪽 노드]
    • 내림 차순 : [오른쪽 노드 -> 부모노드-> 왼쪽 노드]

 

TreeSet

TreeSet<E> treeSet = new TreeSet<E>();
  • 특징

    • 이진 트리(binary tree)를 기반으로한 Set 컬렉션
    • 왼쪽과 오른쪽 자식노드를 참조하기 위한 두개의 변수로 구성
  • 주요 메소드

    • 특정 객체를 찾는 메소드 : first(), last(), lower(), higher(),..
    • 정렬 메소드: descendingIterator(), descendingSet()
    • 범위 검색 메소드 : headSet(), tailSet(), subSet()

 

TreeMap

TreeMap<K, V> treeMap = new TreeMap<K, V>();
  • 특징

    • 이진 트리(binary tree)를 기반으로한 Map 컬렉션
    • 키와 값이 저장된 Map.Entry를 저장
    • 왼쪽과 오른쪽 자식노드를 참조하기 위한 두개의 변수로 구성
  • 주요 메소드

    • 단일 노드 객체를 찾는 메소드 : firstEntry(), lastEntry(), lowerEntry(), higherEntry(),..
    • 정렬 메소드: descendingKeySet(), descendingMap()
    • 범위 검색 메소드 : headMap(), tailMap(), subMap()

 

 

Comparble 와 Comparator

  • TreeSet과 TreeMap의 자동 정렬

    • TreeSet의 객체와 TreeMap의 자동 정렬

      • TreeSet의 객체와 TreeMap의 키는 저장과 동시에 자동 오름차순으로 정렬

      • 숫자(Integer,Double)타입일 경우에는 값으로 정렬

      • 문자열(String) 타입일 경우에는 유니코드로 정렬

      • TreeSet과 TreeMap은 정렬을 위해 java.lang.Comparable을 구현한 객체를 요구

        (Integer,Double,String은 모두 O)

 

  • 사용자 정의 객체를 정렬하고 싶을 경우

    • 방법 1 : 사용자 정의 클래스가 Comparable을 구현

      public class Person implements Comparable<Person>{
          public String name;
          public int age;
      
          public Person(String name, int age) {
              this.name = name;
              this.age = age;
          }
      }
      
          @Override
          public int compareTo(Person o) {
              if(age<o.age) return -1;
              else if(age == o.age) return 0;
              else return 1;
          } 
      }
    • 방법 2 : TreeSet, TreeMap 생성시 Comparator 구현 객체 제공

'IT > Java' 카테고리의 다른 글

LIFO와 FIFO 컬렉션  (0) 2019.08.14
Set 컬렉션  (0) 2019.08.14
List 컬렉션  (0) 2019.08.14
14장 람다식  (0) 2019.07.30
제네릭(Generic)  (0) 2019.07.25