728x90
컬렉션 프레임 워크란
배열을 사용하다 보면 여러가지 비효율적인 문제가 생긴다. 가장 큰 문제점은 크기가 고정적이라는 것이다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 더이상 데이터를 저장할 수 없다. 또 데이터를 삭제하면 해당 인덱스의 데이터는 비어있어 메모리가 낭비되는 등 여러 문제점들이 발생한다. 그렇기에 자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조들을 만들어 놓았다. 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다. 대표적으로는 List, Set, Map, Stack, Queue 등이 있다.
1. List ( ArrayList, LinkedList, Vector )
컬렉션 프레임워크를 상속받고 있는 List컬렉션은 List 컬렉션은 객체를 일렬로 늘어놓은 구조를 가지고 있다.. List 컬렉션은 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다. (인덱스에는 데이터가 저장되어 있는 참조 값을 가지고 있음.)
List :
순서 O , 중복 O
ArrayList - 조회 많은 경우
- 배열을 이용하여 만든 리스트
- 기본크기는 10이지만 원소가 늘어나면 더 큰 배열에 옮긴다.
- 인덱스로 조회 가능하므로, 인덱스만 알면 해당 데이터를 빠르게 조회 할 수 있다.
- 삽입, 삭제를 하면 그 뒤에 있는 데이터를 뒤로 밀거나 앞으로 당겨야 하기 때문에 느리다.
LinkedList - 삽입 / 삭제 많은 경우
- 노드와 포인터를 이용하여 만든리스트이다.
- 특정원소를 조회하는 경우 첫 노드 부터 순회하기 때문에 검색이 느리다.
- 포인터로 각각 노드들을 연결하고 있어서 삽입, 삭제가 빠르다.
- 기존포인터를 끊고 새로운 노드에 연결하면 되기 때문이다.
- 중간에 데이터를 삽입,삭제 할 경우 그 데이터 까지 순차적으로 조회 하기 때문에 O(N)의 시간 복잡도를 가진다
Vector - ArrayList와 비슷하게 배열로 만들어진 리스트 지만 thread-safe하다.
- 한번에 하나의 스레드만 접근이 가능하다.
- get , put 에 모두 syncronized가 걸려있어서 스레드 마다 lock이 걸리게 되고, 성능이 ArrayList보다 좋지 않다.
Stack - LIFO ( Last In First Out) 특성을 가지는 자료구조이다.
- 마지막에 들어온 원소가 처음으로 나가는 특징을 가진다 ( 되돌리기 기능 ctrl + z )
- 들어올 때는 push, 나갈때는 pop이라는 용어를 사용한다.
2. Set ( Hash Set, Tree Set, Linked Hash Set )
Set은 객체를 중복해서 저장할 수 없고 Null값을 저장 할 수 있다.
순서가 없기 때문에 인덱스로 접근이 불가하며 객체에 접근하기 위해서는 순회과정(iterator / for / while)을 거쳐야 한다.
또한 순서가 없기 때문에 데이터의 중복 이 불가능 하다.
Set :
순서 X , 중복 X
HashSet - 순서 X , 중복 X
LinkedHashSet - 중복 X , 순서 O
- 데이터가 들어온 순서데로 저장한다.
TreeSet - 중복 X, 순서 X, 정렬 O // 대용량 검색시 빠르다.
중복을 제거하고 정렬해야 할 때 사용.
- 이진트리를 사용하기 때문에 검색속도가 향상된다.
- 왼쪽 자식 노드 : 부모보다 작은 값
- 오른쪽 자식 노드 : 부모 보다 큰 값
- 이진트리 정렬
- 오름차순(작->큰) : 왼쪽노드 - 부모노드 - 오른쪽노드
- 내림차순(큰->작) : 오른쪽노드 - 부모노드 - 왼쪽노드
한글 정렬 순서 : 가 -> 나 -> 다
- 지원되는 함수 : .add(추가)
.get(가져오기)
.iterator(데이터 검색) // for 문 사용 하시는게 ..
.contains(있는지 판별) (외우기 쉽게 써둔 것입니다 예민하신분들은 뒤로 ...)
.size(객체 수 확인)
.set(교체하기)
.clear(삭제)
.remove(삭제)
.isEmpty(비어있는지확인)
List는 순서 보장 중복 가능
ex)개인정보 저장
Set은 순서 랜덤 중복 불가
ex)좋아하는음식 저장
728x90
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
[JAVA] Stream / 중간연산 (0) | 2022.12.12 |
---|---|
[JAVA] 컬렉션 프레임워크 ( Map ) (0) | 2022.12.04 |
[JAVA] 객체지향설계 SOLID 원칙 (0) | 2022.12.04 |
[JAVA] Lambda 람다표현식 (0) | 2022.12.01 |
[JAVA] Optional (옵셔널) (0) | 2022.12.01 |