새로운 블로그로 이전하였습니다!

Java Collection Framework

Collection 인터페이스 그룹

Collecton 인터페이스

  • 직접적인 구현은 제공하지 않는다.
  • 모든 컬렉션 클래스가 구현해야 하는 메서드들을 포함하고 있다. (add, remove, equals 등)

Set 인터페이스

  • 순서를 유지하지 않는다.
  • 데이터의 중복을 허용하지 않는다.

종류

HashSet

  • 가장 빠른 임의 접근 속도를 갖고 있다.
  • 순서를 예측할 수 없다.

 TreeSet

  • 정렬 방법을 지정할 수 있다
  • 기본적으로 오름차순으로 데이터를 정렬한다.

 LinkedHashSet

  • 예외적으로 입력된 순서대로 데이터를 저장한다.
  • 출력 시 입력된 순서로 데이터를 가져온다.

y축 : 시간/데이터 갯수 ( ns )

x축 : 데이터 삽입/조회 수

3) SortedSet 인터페이스

  • 요소를 오름차순으로 정렬한 Set으로 TreeSet 클래스를 이용할 때 사용한다.

4) Queue 인터페이스

  • 선형 자료구조로 순서가 있는 데이터를 기반으로 만든 인터페이스 (First in First Out)
  • 한쪽 방향으로만 삽입/삭제 가능

종류

  • PriorityQueue
    • 우선순위를 먼저 결정하고 높은 우선순위를 먼저 꺼내서 처리하는 구조

 

5) Deque 인터페이스

  • Queue와 같은 구조이나 양방향으로 삽입/삭제 가능

 

6) List 인터페이스

  • 순서를 유지하며 데이터의 중복을 허용한다.

종류

LinkedList

  • 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용하다.
  • 요소를 검색할 때 처음 노드부터 목표까지 모두 방문한다는 점에서 검색 성능은 떨어진다.
  • 노드를 삭제/삽입 할 경우 노드 링크를 끊거나 연결만 하면 되어서 삽입/삭제에서는 성능이 우수하다.
  • 스택, 큐, 양방향 큐 등을 만들기 위한용도

Vector

  • 과거에 대용량을 처리하기 위해 사용한다.
  • 내부에서 자동으로 동기화처리가 일어나 성능이 좋지 않고 무거워서 잘 사용하지 않는다.

ArrayList

  • 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 띄어나다.
  • 중간 요소 삽입/삭제 시 그 뒤의 요소들을 밀거나 당겨야 하기 때문에 요소의 중간에 삽입,삭제 시 성능은 떨어진다.
  • ArrayList 생성자 선언 시 Jdk1.7부터 <>연산자 내에 자료형 생략이 가능하다.

Stack

  • 데이터를 쌓아 올리는 방식 (Last in First Out)
  • 마지막에 삽입한 데이터를 먼저 이용할 때 사용 ex)웹페이지 뒤로가기

Interation

  • Enumeration의 기능 + 삭제 메서드가 제공된다.
  • Thread-safe를 지원하지 않는다.

 

속도 비교

y축 : 시간/데이터 갯수 ( ns )

x축 : 데이터 삽입/조회 수

LinkedList : 1,000ns ~ 10,000ns 단위 (표 비교 불가)

Map 인터페이스 그룹

1) Map 인터페이스

  • Key와 Value로 이루어진 데이터의 집합
  • 순서가 유지되지 않는다
  • Key는 중복 불가능 / Value는 중복 가능

종류

Hashtable

  • HashMap보다는 느리지만 동기화 지원
  • Null 불가능

HashMap

  • 중복과 순서가 허용되지 않는다.
  • Null 사용 가능

TreeMap

  • 정렬된 순서대로 Key와 Value를 저장하여 검색이 빠르다.

기타 인터페이스 그룹

1) Enumeration

  • 컬렉션에 저장되어 있는 요소들을 순회하면서 수정하거나, 요소를 가져올 수 있다.
  • 컬렉션 프레임워크에 대해 공통으로 사용이 가능하고 사용법이 간단하여 유지보수에 용이하다.
  • 다음 값이 존재하는지 확인과 그 값을 져오는 기능 제공한다. (값 삭제 불가)
  • Enumeration를 구현하기 위해 새로운 객체를 생성하는 부분에서 시간이 더 소모된다.
  • Thread-safe를 지원한다.

2) Iterator 인터페이스

  • Enumeration의 기능 + 삭제 메서드를 제공한다.
  • Thread-safe를 지원하지 않아서 Enumeration보다 상대적으로 더 빠르다.

'Back-End > Java & Spring' 카테고리의 다른 글

[JAVA] JVM 메모리 구조와 라이프 사이클  (0) 2022.08.02
[JAVA] Java Framework 종류  (0) 2022.08.02
[JAVA] 문자열 String  (0) 2022.08.02
[JAVA] int / Integer 차이  (0) 2022.08.02
[JAVA] DBMS Driver  (0) 2022.08.02
복사했습니다!