컬렉션 프레임워크

Updated:

강의 사이트

http://tcpschool.com/

컬렉션 프레임워크의 개념

1. 컬렉션 프레임워크란?

  • 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미
  • 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것
  • 자바의 인터페이스를 사용하여 구현

2. 컬렉션 프레임워크 주요 인터페이스

  • Collection
    • List
    • Set
  • Map

3. 주요 인터페이스 간의 상속 관계

  • List

    • Vector
      • 가장 오래됨. 쓰지말자
    • ArrayList
      • 내부적으로 배열을 이용하여 요소를 저장
      • 그래서 크기를 늘리기 위해 새로운 배열 생성해야함. 느림
    • LinkedList
      • ArrayList 단점을 극복하기 위해 만듬
    • Stack
    • Queue
  • Set

    • HashSet

      • Hash 알고리즘 사용

      • HashMap 인스턴스를 이용하여 요소를 저장
      • LinkedHashSet 을 사용하면 저장 순서 유지할 수 있음
    • TreeSet

      • 이진 검색 트리의 형태로 요소를 저장(레드-블랙 트리로 구현)
      • 데이터 추가, 제거 등 동작 시간이 빠름
  • Map

    • Hashtable
      • 쓰지말자
    • TreeMap
      • 이진 검색 트리의 형태로 요소를 저장(레드-블랙 트리로 구현)
    • HashMap
      • Hashtable이후 나온 클래스
      • 이거를 쓰자
    • Properties

4. Iterator와 ListIterator

  • Enumeration 인터페이스는 Iterator 인터페이스 이전꺼니까 쓰지말자
  • Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다.
  • ListIterator 인터페이스는 Iterator 인터페이스를 상속받아 여러 기능을 추가한 인터페이스
  • ListIterator 인터페이스는 컬렉션 요소의 대체, 추가 그리고 인덱스 검색 등을 위한 작업에서 양방향으로 이동하는 것을 지원

Comparable과 Comparator

1. Comparable < T > 인터페이스

  • Comparable 인터페이스는 객체를 정렬하는 데 사용되는 메소드인 compareTo() 메소드를 정의한다.
  • 자바에서 같은 타입의 인스턴스를 서로 비교해야만 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다.
  • Boolean을 제외한 래퍼 클래스나 String, Time, Date와 같은 클래스의 인스턴스는 모두 정렬 가능
  • 기본 정렬 순서는 작은 값에서 큰 값으로 정렬되는 오름차순

2. Comparator < T > 인터페이스

  • Comparator 인터페이스는 Comparable 인터페이스와 같이 객체를 정렬하는 데 사용
  • Comparator 인터페이스는 내림차순이나 아니면 다른 기준으로 정렬하고 싶을 때 사용할 수 있다.
  • 이때 Comparator 인터페이스를 구현한 클래스에서는 compare() 메소드를 재정의하여 사용
  • 다음 예제는 요소를 내림차순으로 정렬하여 저장하는 TreeSet 인스턴스를 생성하기 위해 Comparator 인터페이스를 구현하는 예제
import java.util.*;

class DescendingOrder implements Comparator<Integer> {

    public int compare(Integer o1, Integer o2) {
        if(o1 instanceof Comparable && o2 instanceof Comparable) {
            Integer c1 = (Integer)o1;
            Integer c2 = (Integer)o2;

            return c2.compareTo(c1);
        }

        return -1;
    }
}

public class Comparable02 {
    public static void main(String[] args) {
        TreeSet<Integer> ts = new TreeSet<Integer>(new DescendingOrder());

        ts.add(30);
        ts.add(40);
        ts.add(20);
        ts.add(10);

        Iterator<Integer> iter = ts.iterator();

        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
    }
}

/*
40
30
20
10
*/

Tags:

Categories:

Updated: