ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - Collection
    궁금했던 것들/java 2021. 10. 31. 13:12

    모던 자바를 공부하면서 예시로 가장 많이 나왔던 Collection 인터페이스를 한번 알아보려고 한다.

    Collection 이라고는 List, ArrayList, HashMap 이렇게 3가지만 사용 해왔는데 어떤 구조를 가지고 다른 Collection 에는 어떤 것들이 있는지 알아보려고 한다.

     

    나는 Collection을 알지 못하고 List, ArrayList, HashMap 을 사용 해왔다... 그래서 Collection의 특징을 사용하는 예제를 보니 어지러웠다.

     

    어지러움을 해결할 필요가 있다.

     


     

    Collection 이란??

    Collection인데 Map에 대한 것도 있는 이유가 구분을 할때 Map 도 Collection을 범주로 넣는다고 한다.

     

     

    public interface Collection<E> extends Iterable<E> { ... }

    여튼 IDLE 에서 import java.util.Collection 해서 Collection 인터페이스 정의를 보면

    이렇게 정의 되어 있다. 즉, Iterable을 상속하는 제네릭 타입의 인터페이스이다.

     

    public interface Map<K, V> { ... }

    Map 역시 제네릭 타입의 인터페이스 이다.

     

    Collection 이나 Map을 구현하는 클래스들을 Collecion으로 통칭하는것 같다.

    ( ※ List, Set 역시 interface로써 Collection을 상속하고 있다.)

     


     

    Collection 특징

    - 다수의 데이터를을 쉽고 효과적으로 처리 할 수 있도록 구현 되어 있는 클래스들이다.

     

     


     

    Collection 인터페이스의 종류와 특징

    인터페이스 구현클래스 특징
    List LinkedList
    Vector
    ArrayList
    순서가 있는 데이터의 집합으로 중복을 허용한다.
    Set HashSet
    TreeSet
    순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않음
    Queue LinkedList
    PriorityQueue
    List와 유사
    Map Hashtable
    HashMap
    TreeMap
    키, 값의 쌍으로 이루어진 데이터 집합으로 순서는 유지 되지 않으며 키는 중복을 허용하지 않고 값은 중복을 허용한다.

     

     

    1. List 인터페이스

    클래스명 설명
    Vector Java 1.0에서 추가.
    동기화 기능을 제공
    기본적으로 length 10을 제공하고 값이 늘어나면 두배씩 늘려 나간다.
    (사용하지 않는것을 추천)
    ArrayList Java 1.2에서 추가.
    동기화 기능 X (그래서 동기화를 생각 하면서 개발하거나 Collections.syncronizedList(List<T> list) 를 사용)
    내부적으로 배열에 전부 데이터를 관리하며 추가, 삭제가 이루어 지면 새로운 배열에 다시 복사한다.
    즉, 추가, 삭제가 많을 경우 좋지 않다.
    그러나 배열에 있기 때문에 검색에 유용하다.
    LinkedList Java 1.2에서 추가.
    동기화 기능 X (그래서 동기화를 생각 하면서 개발하거나 Collections.syncronizedList(List<T> list) 를 사용)
    각 노드가 이전과 다음 노드의 주소를 알고 있는 구조이다.
    그래서 추가, 삭제를 하더라도 ArrayList 보다는 더 좋은 구조
    그러나 검색을 한다면 처음부터 모든 노드를 다 검색해야 해서 검색을 한다면 좋지 않다.

     

    2. Set 인터페이스

    클래스명 설명
    HashSet 중복을 허용하지 않음
    순서를 유지하지 않아서 저장순서랑 다를 수 있음
    같은 클래스로 구현된 서로다른 객체를 다른 것으로 보고 중복으로 치지 않음
     => 그래서 add()가 호출하는 equals()와 hashCode()를 오버라이딩 하면 중복처리가 가능함
    TreeSet 중복을 허용하지 않음
    순서를 유지하지 않아서 저장순서랑 다를 수 있음
    이진 검색트리 구조의 형태로 데이터를 저장함
    순차적으로 저장하지 않아서 추가/삭제에 시간이 걸림
    검색과 정렬에 유리함
    비교할 클래스에 Comparable 의 compareTo()를 오버라이딩 해서 구현
    compareTo() 기준으로 해서 정렬됨

     

    3. Queue 인터페이스

    클래스명 설명
    Queue(LinkedList) FIFO(Frist In Frist Out) 형태
    LinkedList로 구현
    사이즈가 가변적이고 쉽게 늘어남
    PriorityQueue Queue와 흡사하나 우선순위가 추가됨
    비교할 클래스에 Comparable 의 compareTo()를 오버라이딩 해서 구현
    compareTo() 기준으로 해서 반환됨

     

    4. Map 인터페이스

    클래스명 설명
    Hashtable Vector 처럼 동기화를 제공
    HashMap으로 대체 가능
    Key에 null 허용하지 않음
    (사용하지 않는것을 추천)
    HashMap 흔히 생각하는 Map
    Key에 null 허용
    동기화를 제공하지 않음
    TreeMap TreeSet과 흡사하나 차이점은 TreeSet은 값을 저장한다면 TreeMap은 키와 값이 저장된 맵을 저장
    키를 키준으로 정렬하나 Comparable 의 compareTo()를 통해서 다르게 가능

     


    마치며..

    자주 사용 했던 List와 Map은 알고 있는 내용과 그렇게 차이가 나지 않았다.근데 comparator를 활용한 Tree구조라던지 Queue 같은 경우는 필요하다면 충분히 사용해볼수 있을거 같다.단순 웹개발만 하고 있어서 쿼리문을 통해서 정렬이라던지 조건을 처리하고 데이터를 조회해서 데이터를 따로 정렬하거나 할 필요가 없는데 이렇게 알고 있으면 분명 나중에 사용 해 볼 수 있을거 같다.

    '궁금했던 것들 > java' 카테고리의 다른 글

    JAVA - Enum  (0) 2021.11.01
    JAVA - 제네릭(Generic)  (0) 2021.10.30

    댓글

Designed by Tistory.