자료구조 |
내부 구조 |
삽입/삭제 속도 |
접근 속도 |
특징 |
ArrayList |
배열 기반 |
끝에 추가가 빠름. 중간 삽입이나 삭제가 늦음 |
인덱스로 빠르게 접근이 가능 |
일반 리스트용(랜덤 access 시 최적) |
LinkedList |
노드 연결 구조 |
앞뒤 삽입이나 삭제가 빠르다 |
인덱스 접근이 늦다(순차 탐색) |
양방향 연결 리스트 |
ArrayDeque |
원형 배열 기반 |
앞/뒤 삽입/삭제가 모두 빠르다 |
인덱스 접근이 안된다. |
stack이나 queue에 특화 |
1. queue
Queue<Integer> q = new LinkedList<>();
- 자바의 queue는 interface라서 new Queue<>() 자체는 불가능하다.
- ArrayList는 queue 인터페이스를 구현하지 않는다
- LinkedList는 queue, deque 인터페이스를 모두 구현한다.
Queue<Integer> q = new LinkedList<>(); // O
Queue<Integer> q = new ArrayDeque<>(); // O
Queue<Integer> q = new ArrayList<>(); // ❌ 컴파일 에러
2. ArrayDeque는 언제 쓰는지?
- ArrayDeque는 스택이나 큐처럼 앞뒤에서 빠르게 삽입이나 삭제가 필요할 때 쓴다.
- 성능이 LinkedList보다 훨씬 좋다
- null 허용하지 않는다.
Queue<Integer> q = new ArrayDeque<>(); // 빠르다
Deque<Integer> dq = new ArrayDeque<>(); // 앞뒤로 넣고 빼는 deque도 가능하다
3. 정리
사용 상황 |
적합한 자료구조 |
순차적 접근, 인덱스로 자주 읽는 경우 |
ArrayList |
앞뒤로 추가나 삭제가 자주 일어나는 경우 |
LinkedList |
스택/큐처럼 빠르게 넣고 빼는 경우 |
ArrayDeque |