자바 - 컬렉션 프레임워크

pa324·2019년 12월 13일
1

컬렉션 프레임 워크

  • 필요한 자료구조를 미리 구현하여 java.util 패키지에서 제공
  • Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있다.
  • Collection 인터페이스는 하나의 자료를 모아서 관리하는데 필요한 기능을 제공
  • Map 인터페이스는 쌍(pair)로 된 자료들을 관리하는데 유용한 기능을 제공

Collection 인터페이스

  • Collection 인터페이스 하위에 List 인터페이스와 Set인터페이스가 있다.
  • List를 구현한 클래스는 순차적인 자료를 관리하는 데 사용하는 클래스
    • ArrayList, Vector, LinkedList, Stack, Queue 등
  • Set 인터페이스는 집합의 개념 (순서와 상관없이 중복을 허용하지 않는다.)
    • HashSet, TressSet 등

주요 메서드

  • boolean add(E e) : Collection에 객체를 추가
  • void cleear() : Collection으 모든 객체를 제거
  • Iterator<E> iterator : Collection을 순환할 반복자(iterator)를 반환
  • boolean remove(Object o) : Collecion에 매개변수에 해당하는 인스턴스가 존재하면 제거
  • int Size() : Collection에 있는 요소의 개수를 반환

Map 인터페이스

  • Map 인터페이스는 하나가 아닌 쌍(Pair)으로 되어 있는 자료를 관리하는 메서드들이 선언되어 있다.
  • Key-Value 쌍이라고 표현하는데 이 때 키 값은 중복될 수 없다.
  • Hashtable, HashMap, TreeMap, Properties
  • Map은 기본적으로 검색용 자료구조 이다.
  • 즉, 어떤 Key값을 알고 있을 때 value를 찾기 위한 자료구조

주요 메서드

  • V put(K key, V value) : key에 해당하는 value값을 map에 넣는다.
  • V get(K key) : key에 해당하는 value값을 반환한다.
  • boolean isEmpty() : Map이 비어있는지 여부를 반환
  • boolean containsKey(Object key) : Map에 해당 value가 있는지 여부를 반환
  • boolean containsValue(Object value) : Map에 해당 value가 있는지 여부를 반환
  • Collection values() : value를 Collection으로 반환(중복 무관)
  • V remove(key) : key가 있는 경우 삭제 한다
  • boolean remove(Object key, Object value) : key가 있는 경우 key에 해당하는 value가 매개변수와 일치할 때 삭제

Set 인터페이스

  • 순서와 상관없이 중복을 허용하지 않는 경우에는 Set인터페이스 사용
    • 회원 아이디, 주빈번호, 사번, 홈쇼핑 주문 번호 ...
  • 입력된 데이터의 순서를 보장하지 않는다.
  • Set 인터페이스를 구현한 대표 클래스에는 HashSet, TreeSet이 있다.

HashSet

  • 집합 자료구조를 구현하고 중복을 허용하지 않는다.
  • 아래 예제에서는 String 클래스를 사용해서 hashSet에 추가하였기 때문에 중복을 String Class에서 판단하지만, 사용자가 정의한 객체를 추가할때 equals, hashCode를 Override해서 사용해야 한다.
package collection.hashset;

import java.util.HashSet;

public class HashSetTest {
	public static void main(String[] args) {
    	HashSet<String> hashSet = new HashSet<String> ();
      	hashSet.add(new String("임정순"));
      	hashSet.add(new String("박현정"));
      	hashSet.add(new String("임정순")); //추가 안됨
    }
}

TreeSet 클래스

  • 자바의 Collection 인터페이스나 Map 인터페이스를 구현한 클래스 중 Tree로 시작하는 클래스는 데이터를 추가한 후 결과를 출력하면 결과 값이 정렬된다.
    • 정렬을 위해 이진 트리(binary tree) 사용 (밑에 설명)
  • TreeSet은 자료의 중복을 허용하지 않으면서 출력 결과 값을 정렬하는 클래스
  • 어떤 기준으로 요소를 정렬하여 TreeSet을 만들지 정의 필요(Comparable 인터페이스, Comparator 인터페이스)

package collection.treeset;
import java.util.TreeSet;

public class TreeSetTest {
	public static void main(String[] args) {
    	TreeSet<String> treeSet = new TreeSet<String>();
      	treeSet.add("홍길동");
      	treeSet.add("강감찬");
      	treeSet.add("이순신");
      
      	for(String str : treeSet) {
        	System.out.println(str);
        }
    }
}

Comparable 인터페이스, Comparator 인터페이스

  • 자기 자신과 전달받은 매개변수를 비교
  • Comparable 인터페이스에는 compareTo() 추상 메서드가 포함되어 있다.
    • 따라서, Comparable인터페이스를 implements하는 클래스에서는 compareTo() 메서드를 구현해야 한다.
  • Comparator역시 정렬을 구현하는데 사용하는 인터페이스, compare() 추상 메서드가 포함되어 있다.
    • compare() 메서드에는 매개 변수가 2개 전달된다. Comparable의 compareTo()는 this와 전받은 매개변수를 비교하였다면, compare()메서드는 전달되는 두 매개변수를 비교한다.

이진 검색 트리 (Binary Search Tree)

  • 이진 검색 트리는 노드에 저장되는 자료의 중복을 허용하지 않고, 부모가 가지는 자식 노드의 수가 2개 이하이다.
  • 왼쪽에 위치하는 자식 노드는 항상 부모 노드 값보다 작다.
  • 오른쪽에 위치하는 자식 노드는 항상 부모 노드보다 큰 값을 가진다.
  • 따라서, 어 떤 값을 찾으려 할때 root node와 비교해 작은 값이면 왼쪽 자식 노드로, 큰 값이면 오른쪽 자식 노드로 이동하면 된다.

Map 인터페이스

  • Map 인터페이스는 자료를 쌍(pair)으로 관리하는 데 필요한 메서드가 정의되어 있다.
  • key-value 쌍으로 이루어진 객체의 key값은 유일하면 value값은 중복될 수 있다.
  • 내부적으로 해시 알고리즘에 의해 구현되어 있다.

HashMap 클래스

  • HashMap<자료형,자료형> hashMap = new HashMap<자료형,자료형>
  • hashMap에서 자료를 관리하는 방식은 해시 방식
  • 해시 방식의 자료를 저장하는 공간을 헤시 테이블 이라고 한다.
  • key값이 정해지면 그에 대응하는 해시 테이블의 저장 위치가 정해지는데 이를 계산해주는 함수가 '해시함수' 이다.
  • 자료 추가 속도나 검색 속도가 상당히 빠르다.
  • 서로 다른 key값에 같은 index가 반환되는 충돌이 발생하는 경우도 있다.
    • 해시 테이블에 데이터를 꽉 채우지 않고 적정 수준이 되면 테이블을 확장해 충돌 발생 확률을 낮춘다.
      • Map 인터페이스에서 사용하는 key값은 중복될 수 없으므로, equals()메서드와 hashcode() 메서드를 재 정의하여 사용하는 것이 좋다.
  • Map 인터페이스는 모든 자료를 한 번에 순회할 수 있는 방법 없다.
    • 모든 자료를 순회하기 위해서 key값을 먼저 가져와서 key값에 해당하는 value를 찾아야 한다.
      • hashMap.keySet() 메서드를 호출하면 모든 key값이 Set객체로 반환
      • 반환된 Set객체에 iterator() 메서드를 호출하면 key를 순회할 수 있는 iterator가 반환된다.
      • Set객체로 변환된 key값을 순회하면서 해당 value를 가져온다

HashTable

  • 자바 1부터 사용
  • Vector 클래스와 마찬가지로 멀티 스레드를 위한 동기화 제공
  • 멀티스레드 환경이 아니라면, HashMap 사용 권장

TreeMap 클래스

  • TreeMap<자료형,자료형> treeMap = new TreeMap<자료형,자료형>
  • Map 인터페이스를 구현한 클래스 중 key값으로 자료를 정렬하려면 TreeMap을 사용할 수 있다.
  • TreeMap은 TreeSet과 마찬가지로 이진 검색 트리로 구현되어 있다.
  • Comparable, Comparator인터페이스를 구현해야 한다.
profile
안녕하세요

0개의 댓글