면접준비(3)컬렉션

Tae hyun·2023년 3월 28일
0

면접준비

목록 보기
3/9

Java의 collection
:데이터의 집합, 그룹을 의미함
자바 컬렉션 프레임워크는 객체들을 한 곳에 모아 관리하고, 편하게 사용하기 위해 제공되는 환경.
데이터, 자료구조인 컬렉션, 컬렉션을 구현하는 클래스를 정의하는 인터페이스를 제공함
대표 종류: list, Map, Set, Stack, Queue

사용이유:
1.다수의 Data를 다루는데 표준화된 클래스들을 제공해주므로 DataStructure(자료구조)를 직접 구현하지 않고 편하게 사용할 수 있게 함.
2.배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되며, 상황에 따라 객체 수를 동적으로 정할 수 있다. (프로그램의 공간적 효율성을 높여줌)

List: LinkedList, Vector, ArrayList. 순서가 있는 데이터의 집합으로 데이터의 중복 허용

Map: HashMap, HashTable,TreeMap. Key-Value의 쌍으로 이뤄진 데이터의 집합으로, 순서는 유지되지 않으며, Key의 중복을 허용하지 않으나 Value의 중복은 허용.

Set: HashSet, TreeSet. 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않음.

Queue: LinkedList, PriorityQueue. List와 유사. FiFo 구조(First In First Out.선입선출)

Stack: LiFo구조(Last In First Out.후입선출)를 가지고 있는 선형 자료구조. 단일연결리스트로 구현 가능하나 대부분의 조건에서 성능저하를 가져오기에 사용지양.

1)List: ArrayList,LinkedList,Vector가 있음
-ArrayList
:자바의 vector를 개선한 배열로 구현된 List. 데이터가 저장된 순서가 같음
배열과 같은 자료구조를 가지고 있어, List의 연산 자체 수행시간과 속도는 배열 과 동일함.(단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 성능이 뛰어나다)

-Vector: collection 프레임워크의 일부이며 java.util 패키지에 소속되어있 음. 항상 동기화되어있고 collection 프레임워크에 없는 메서드들을 사용 가 능. 하지만 동기화라는 특징 때문에 스레드가 아닌 환경에서는 거의 사용되지 않 으며, 스레드 환경에서 안정성은 높지만 ArrayList와 비교하여 추가, 검색, 삭 제 성능이 떨어짐

-LinkedList
:다음 노드 주소를 기억하고 있는 List. 배열에 배해 삽입과 삭제가 간단함.
하지만 탐색할 때는 첫번째 노드부터 탐색하기 때문에 속도가 느림
-양방향 포인터 구조.데이터의 삽입, 삭제가 빈번할 경우 유용함(데이터의 위치정 보만 수정하면 됨)
*노드: 데이터를 저장하는 부분과 다음 노드에 대한 포인트로 이루어져 있음.
첫 번째 노드를 헤드(Head), 마지막 노드를 테일(Tail)이라고 부르는데 Linked List 구조에서는 헤드 노드의 정보만 가지고 있으면 다음 노드를 찾아갈 수 있고(특정 위치에 있는 노드를 탐색하는데는 많은 연산이 필요함), 데이터 개수 에 맞춰 필요한 수의 메모리만 사용할 수 있음

2)Map: HashMap,HashTable,TreeMap

-HashMap
:가장 일반적으로 사용하는 Map
Key값에 해시 함수를 적용해 나온 인덱스에 value를 저장한다. 중복과 순서가 허 용되지 않고 null값이 올 수 있다.

-HashTable
:HashMap보다는 느리지만 동기화를 지원함
*동기화: 작업들 사이의 수행 시기를 맞추는 것. 동기화가 제공된다고 해서 무조건 좋은 것이 아니다. 동기화가 지원되는 컬렉션을 사용하면 실행 속도 측면에서 성능 이 떨어짐

-TreeMap
:Red-Black Tree 자료구조를 이용한 Map.
트리구조로 어느 정도는 순서를 보장함
정렬된 순서대로 Key, Value를 저장하기에 검색이 빠름

3)Set : HashSet, TreeSet

-HashSet
:사실상 HashMap에서 Key값을 뺀 자료형 집합으로 봐도 됨
Value(값)이 포함되어 있는지 아닌지만 관심이 있다. 순서보장x, 중복 값 허용x.
임의 접근 속도가 가장 빠르지만, 순서를 예측할 수 없다.

-TreeSet
:Red-Black Tree 자료구조를 사용한 Set으로 정렬 방법을 지정할 수 있다.

4)Stack&Queue

-Stack
: 직접 new 연산자로 객체를 생성하여 사용 가능함. 데이터를 차곡차곡 쌓아 올린 형태의 자료구조로 데이터가 순서대로 쌓이며 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조를 가짐. 삽입 연산-push, 삭제연산-pop. LIFO(last In First Out)

-Queue
:LinkedList에 new 연산자로 객체를 생성함으로써 사용 가능함. FIFO(First In First Out)구조. 삭제 연산-front(디큐), 삽입 연산-rear(인큐). 스택과 다르 게 큐이 한쪽 끝에서는 삽입 작업, 다른 한쪽에서는 삭제작업이 나뉘어서 이뤄짐

출처1 컬렉션프레임워크란?:https://backendcode.tistory.com/163
출처2 벡터:https://crazykim2.tistory.com/570
출처3 노드 :https://velog.io/@woojinn8/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Linked-List
출처4 동기화: https://madplay.github.io/post/java-collection-synchronize
출처5 스택과 큐: https://jud00.tistory.com/entry/자료구조-스택Stack과-큐Queue에-대해서-알아보자

profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글