본문 바로가기

JAVA 공책/내 자료 정리(수정)

List 정리

** List

배열

배열은 다른 List 보다 공간 낭비가 적다.

배열은 크기 확장이 가능하지 않아서 여분의 공간이 없기 때문에 데이터를 크기보다 초과해서 삽입하거나 집어 넣은 데이터를 삭제하는 작업 그리고 복사하는 작업을 하지 않기 때문이다.

리스트는 반대로 크기가 정해져 있지 않고 중간에 삽입하거나 삭제, 복사 하는 작업을 할 수 있다. 그래서 배열보다 속도가 느리고 공간이 낭비가 있다.


ArrayList

ArrayList는 연속된 공간에 데이터를 저장하고 여분의 공간을 가지고 있어서 데이터를 중간에 삽입하거나 삭제할 수 있다. 대신, 중간에 삽입, 삭제를 하게 되면 데이터를 이동시켜야 하기 때문에 시간이 많이 걸린다는 단점이 있다.


LinkedList

LinkedList는 데이터가 다음의 데이터 주소를 저장하는 구조이다. 그래서 데이터가 연속되게 저장되지 않아 데이터의 이동이 없어도 데이터를 저장할 수 있고 삽입, 삭제가 용이하다. 그래서 작업을 빠르게 수행할 수 있다는 장점이 있다. 하지만 이전 데이터를 확인하지 않고는 다음 데이터를 조회할 수 없어서 접근 속도가 느리다는 단점을 가지고 있다. 참고로 C언어로 취업하고자 할 때는 LinkedList는 직접 구현할 수 있어야 한다. C언어에서 LinkedList를 구현하려면 자기 참조 구조체를 이용하면 된다.


=> 따라서 데이터의 개수가 변경될 가능성이 없는 경우에는 배열을 사용하는 것이 좋고, 삽입과 삭제가 빈번히 일어나야 한다면 LinkedList가 효율적이다. 만약 검색 속도 즉, 읽어내는 속도가 빨라야 한다면 ArrayList를 사용하는 것이 좋다.


Stack

Stack은 마지막에 삽입된 데이터가 가장 먼저 출력되는 구조이다.

LIFO 라고도 하는데 Last In First Out의 약자이다.

변수를 선언할 때 순서대로 저장하는 용도로 사용하고 메소드를 호출했을 때 호출한 곳의 주소 등을 저장할 때 많이 쓰인다. 스마트폰 애플리케이션에서 네비게이션이 Stack을 사용하고 있다. java.util.tack이라는 클래스에 소속되어 있고 데이터를 삽입하는 메소드는 push(데이터), 삭제와 동시에 꺼내는 메소드는 pop()이다. 만약 데이터를 삭제하지 않고 꺼내고 싶다면 peek() 메소드를 사용하면 된다. Stack은 개발자가 직접 만들어서 사용하는 것보다는 시스템이 사용하는 경우가 많다.


Queue

Queue는 먼저 삽입된 데이터가 먼저 출력되는 자료구조이다. FIFO라고도 하며, First In First Out 의 약자이다. Queue는 스케줄링의 작업순서 등에 이용할 수 있고 java.util.Queue라는 '인터페이스'를 통해서 제공되고 있다. Queue는 ArrayList와 PriorityQueue 등의 클래스에서 implements 했다. PriorityQueue 클래스는 우선순위 큐라고 해서 데이터를 순서대로 정렬해서 저장하는 클래스이다.


Deque

Deque는 양쪽에서 삽입과 삭제가 가능한 자료구조이다. 지도같은 스크롤 뷰에 많이 사용되고 있다. 취업 할 시에 Deque는 다시 한번 공부하고 면접을 보는 것이 좋다.