1️⃣ Array, 배열
: 자료형의 집합
→ 선언 방식
→ 배열의 특징
(1) 배열의 길이(크기)는 고정
(2) 반복문과 인덱스를 통해 배열의 값 접근
(3) [배열이름.length] 를 사용해 배열의 길이 접근
2️⃣ ArrayList
: 배열과 유사한 자료형의 집합
: List 자료형(인터페이스) 중 하나
→ 선언 방식
-- java.util.ArrayList 패키지를 import 해서 사용
-- ArrayList<Generic 명> 리스트이름 = new ArrayList<Generic명>();
→ ArrayList의 특징
(1) 배열의 길이가 동적으로 변함 > 원하는 만큼의 값을 담을 수 있음 > 자동으로 크기가 늘어남
(2) 다양한 메서드를 제공 > CRUD 구현 가능
메서드 기능 | 메서드 명 | 반환 타입 |
원소 추가(C) | add(E e) | boolean |
add(int index, E element) | void | |
원소 접근(R) | get(int index) | E |
배열 확인 | isEmpty() | boolean |
배열 삭제(D) | remove(int index) | E |
remove(Object o) | boolean | |
배열 수정(U) | set(int index, E element) | E |
배열 크기 확인 | size() | int |
배열 원소 확인 | contains(Object o) | boolean |
ArrayList → Array |
toArray() | Object[] |
toArray(T[] a) | <T> T[] |
(3) isEmpty, size, get, set, iterator, listIterator 은 상수 시간 복잡도(O(1))를 가짐
(4) add는 O(n) 의 복잡도를 가짐 > 특정 위치에 추가할 시에 리스트의 원소들을 재배열해야 하기 때문
(5) 다른 메서드들은 선형 시간 복잡도를 가짐
✅ 배열 → ArrayList 변환
-- java.util.Arrays 패키지의 asList 메서드 사용
-- Arrays.asList(배열) : List<T> 로 반환
3️⃣ LinkedList, 연결리스트
: 데이터가 노드로 연결되어 있는 리스트의 형태
: List 자료형(인터페이스) 중 하나
: 노드는 데이터와 포인터(next, prev)를 가지고 있음
: 자바 java.util.LinkedList 패키지에는 양방향 연결 리스트로 구현되어 있음
→ 선언 방식
-- java.util.LinkedList 패키지 임포트해서 사용
→ LinkedList 특징
(1) 데이터를 추가, 삭제에 용이 > 포인터만 주소값에 연결해주면 되기 때문에
(2) 특정 데이터 접근에는 ArrayList 보다 떨어진 성능을 보임 > 사실상, 처음 or 마지막부터 포인터를 따라 주소값을 찾아가야 하기 때문
(3) 자바에서는 ArrayList 메서드 모두 제공
(4) LinkedList에서만 제공 > 리스트 앞 뒤에 삽입 & 삭제하는 메서드가 많음 + 스택 메서드도 존재
메서드 기능 | 메서드 명 | 반환 타입 |
맨 앞에 원소 추가 (C) | addFirst(E e) | void |
offerFirst(E e) | boolean | |
push(E e) | void (리스트를 스택 형태라고 생각) | |
맨 뒤에 원소 추가 (C) | addLast(E e) | void |
offerLast(E e) | boolean | |
첫 번째 원소(head) 접근 (R) | getFirst() | E (배열이 null일 경우, runtime error) |
peekFirst() | E (배열이 null일 경우, null 반환) | |
peek() | E (배열이 null일 경우, null 반환) | |
마지막 원소 접근 (R) | getLast() | E (배열이 null일 경우, runtime error) |
peekLast() | E (배열이 null일 경우, null 반환) | |
첫 번째 원소 삭제 (D) | remove() | E (삭제된 원소 반환, 배열이 null일 경우→ runtime error) |
removeFirst() | E (삭제된 원소 반환, 배열이 null일 경우→ runtime error) | |
pop() | E (리스트를 스택 형태라고 생각) | |
poll() | E (삭제된 원소 반환, 배열이 null일 경우→ null 반환) | |
pollFirst() | E (삭제된 원소 반환, 배열이 null일 경우→ null 반환) | |
마지막 원소 삭제 (D) | removeLast() | E (삭제된 원소 반환, 배열이 null일 경우→ runtime error) |
pollLast() | E (삭제된 원소 반환, 배열이 null일 경우→ null 반환) |
4️⃣ Array & ArrayList & LinkedList
Array | ArrayList | LinkedList | |
크기 | 정적인 크기 (크기 지정 O) | 동적인 크기 (크기 지정 O / X) | 동적인 크기 (크기 지정 X) |
특정 데이터 접근 | index 사용 & 빠름 | get 사용 & 빠름 | get 사용 & 느림 |
데이터 삽입, 삭제 | 삽입 시 크기 제한 존재 특정 인덱스에 삽입/삭제 시에 배열 전체를 변경 해야 함 |
특정 인덱스에 삽입/삭제 시에 진행되는 연산이 느림 | 특정 인덱스에 삽입/삭제 시에 주소값만 수정하여 연결하기 때문에 빠름 |
패키지 | Arrays | Collections |
🧲 출처
LinkedList 그림 : https://www.programiz.com/java-programming/linkedlist
Java LinkedList (With Examples)
Java LinkedList In this tutorial, we will learn about the Java LinkedList in detail with the help of examples. The LinkedList class of the Java collections framework provides the functionality of the linked list data structure (doubly linkedlist). Java Dou
www.programiz.com
'JAVA > CS 스터디' 카테고리의 다른 글
[CS 스터디: JAVA] (6) 트라이 (0) | 2022.08.11 |
---|---|
[CS 스터디 : JAVA] (5) 해시, Hash (0) | 2022.08.11 |
[CS 스터디 : JAVA] (4) 이진 탐색 트리 (0) | 2022.08.11 |
[CS 스터디 : JAVA] (3) 트리 (0) | 2022.08.07 |
[CS 스터디 : JAVA] (2) Stack & Queue & Heap (0) | 2022.08.07 |