티스토리 뷰
★ LinkedList와 List 차이점 – 언제 뭘 써야 할까?
Java를 공부하다 보면 List, ArrayList, LinkedList 같은 자료구조를 자주 만나게 된다. 이름은 비슷한데, 정확히 무슨 차이가 있는지 헷갈리는 경우가 많다. 이번 글에서는 각각이 어떤 역할을 하는지, 그리고 어떤 상황에서 어떤 걸 쓰는 게 좋은지 정리해보려고 한다.
☆ List는 인터페이스
먼저 List는 클래스가 아니라 인터페이스다. 쉽게 말하면, 어떤 기능을 제공할지 약속만 해놓은 틀 같은 거다. 실제로 데이터를 저장하거나 조작하는 일은 ArrayList, LinkedList 같은 구현 클래스가 담당한다.
★ ArrayList와 LinkedList는 구현 방식이 다르다
둘 다 List 인터페이스를 구현하고 있고, 데이터를 순서대로 저장할 수 있다. 하지만 내부 구조와 동작 방식에는 큰 차이가 있다.
✅ ArrayList – 배열 기반
- 내부적으로 배열을 사용해서 데이터를 저장한다.
- 인덱스를 이용한 접근이 빠르다. (get(index) 속도가 빠름)
- 중간에 삽입하거나 삭제할 때는 느리다. (요소들을 옮겨야 해서 시간이 걸림)
✅ LinkedList – 노드 기반
- 노드들이 서로 연결되어 있는 구조다. (이중 연결 리스트)
- 중간에 데이터를 삽입하거나 삭제할 때 빠르다. (노드 연결만 바꾸면 됨)
- 인덱스를 통한 접근은 느리다. (앞에서부터 순차적으로 찾아야 하기 때문)
★ 언제 어떤 걸 써야 할까?
상황추천 자료구조
| 인덱스로 자주 접근할 경우 | ArrayList |
| 중간 삽입/삭제가 자주 일어나는 경우 | LinkedList |
| 데이터 크기가 자주 바뀌지 않는 경우 | ArrayList |
| 큐(Queue)처럼 앞뒤로 데이터를 넣고 빼야 할 경우 | LinkedList |
예시 – 큐처럼 사용하기
Queue<String> queue = new LinkedList<>(); queue.offer("apple"); queue.poll(); // 가장 앞의 요소 제거
- 대부분의 경우에는 ArrayList를 사용하는 게 더 효율적이다.
- 삽입과 삭제가 빈번한 경우에는 LinkedList를 고려해볼 만하다.
- 항상 List로 선언해두고, 상황에 따라 구현체만 바꾸는 방식이 가장 유연하다.
★ Java에서 ArrayList<String> vs String[] 차이점 정리
1. 기본 개념부터 다름
| 자료구조 | 배열 (Array) | 컬렉션 클래스 |
| 크기 | 고정됨 (한 번 정하면 변경 불가) | 동적으로 크기 조절 가능 |
| 선언 | String[] arr = new String[3]; | ArrayList<String> list = new ArrayList<>(); |
| 기능 | 단순 저장 및 인덱스로 접근 | 추가, 삭제, 검색 등 다양한 메서드 제공 |
| 속도 | 조금 더 빠름 (가볍고 단순함) | 상대적으로 느릴 수 있음 (기능 많음) |
2. 크기 유연성
- String[]은 크기를 한 번 정하면 변경이 안 된다.
-
String[] arr = new String[3]; arr[0] = "A"; arr[1] = "B"; arr[2] = "C"; // arr[3] = "D"; // 에러 발생
- ArrayList는 계속 add()로 요소를 추가할 수 있다.
-
ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); // 문제 없음
3. 사용 가능한 메서드 차이
- 배열은 거의 기능이 없다. 그냥 인덱스로 접근하고, 길이 구하는 정도 (arr.length)
- ArrayList는 여러 기능이 포함돼 있다.
- list.add("apple"); list.remove("apple"); list.contains("banana"); list.size(); list.get(2);
4. 제네릭 지원 (<>)
- ArrayList<String>처럼 제네릭 타입을 쓸 수 있어서 타입 안정성이 좋다.
- 배열은 타입을 정하긴 하지만, 복잡한 구조에서는 제네릭처럼 쓸 수 없다.
5. 사용 예와 추천 상황
상황추천 자료구조
| 크기가 고정된 단순한 데이터 | String[] |
| 데이터 추가/삭제가 자주 필요할 때 | ArrayList<String> |
| 반복문에서 빠르게 처리해야 할 경우 | String[] (조금 더 빠름) |
| 기능이 다양한 조작이 필요한 경우 | ArrayList<String> |
- 배열(String[])은 가볍고 빠르지만, 기능이 제한적이고 크기가 고정되어 있다.
- ArrayList<String>는 유연하고 메서드가 많지만, 상대적으로 성능은 조금 떨어질 수 있다.
- 단순하고 고정된 데이터 구조가 필요하다면 배열을 쓰면 된다.
- 하지만 대부분의 실무에서는 데이터가 계속 추가되고, 삭제되기도 하고, 검색이나 정렬 같은 작업도 해야 하기 때문에 ArrayList를 더 자주 쓰게 된다.
'차곡차곡 > Java' 카테고리의 다른 글
| [Java] JVM의 메모리 구조 (0) | 2022.12.29 |
|---|---|
| [Java] 객체지향프로그래밍 / 클래스와 객체 (0) | 2022.12.22 |
| [Java] 형식화된 출력 - printf( ) (0) | 2022.12.22 |
| [기타] 자바 관련 문제 - 시험 복습 (1) | 2022.12.13 |
| [JAVA] 엔티티 매핑 (4) - 기본 키 매핑 (0) | 2022.07.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- React
- 엘리먼트 렌더링
- 영주 한우
- fragment태그
- intellij 한글 깨짐
- 영속성 관리
- 데이터베이스 스키마 자동 생성
- Counter 만들기
- 온량 서울숲점
- 영주역 맛집
- JPA애플리케이션개발코드
- 토마호크 맛집
- 로제 파스타 맛집
- JPQL이란
- 콘솔 창 한글 깨짐
- 리액트 엘리먼트 렌더링하기
- 엔티티매니저팩토리
- 커틀렛 맛집
- 풍기역맛집
- react counter
- JPA
- tick 만들기
- DDL 생성 콘솔 출력
- 버튼누르면전구이미지변하기
- JPA라이브러리
- 리액트 이벤트 처리하기
- JPA 기본키 매핑 전략
- 꾸덕꾸덕 파스타 맛집
- pip 설치 오류
- React를 이용한 Counter 만들기
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
글 보관함
