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 |