방법 |
특징 |
LinkedList |
노드 기반, 삽입·삭제에 유리 |
Vector |
동기화된 ArrayList, 잘 안 씀 |
Stack, Queue |
용도 특화 자료구조, 내부는 List |
Stream.toArray() |
일시적 동적 생성 |
직접 재할당 |
배열만으로 구현하고 싶을 때 사용 |
✅ 1. LinkedList 사용 (컬렉션 기반)
import java.util.LinkedList;
LinkedList<String> list = new LinkedList<>();
list.add("hello");
list.add("world");
- ArrayList와 다르게 내부적으로 연결된 노드 구조
- 삽입/삭제가 많은 경우 효율적
- index 접근 속도는 느림
✅ 2. Vector 사용 (구버전 동기화 리스트)
import java.util.Vector;
Vector<Integer> vec = new Vector<>();
vec.add(1); vec.add(2);
- ArrayList와 비슷하지만 스레드에 안전함 (동기화됨)
- 하지만 요즘은 성능 문제로 잘 안 씀
✅ 3. Stack / Queue / Deque 등 자료구조 사용
import java.util.Stack;
Stack<Integer> stack = new Stack<>();
stack.push(10);
import java.util.Queue;
import java.util.LinkedList;
Queue<String> queue = new LinkedList<>();
queue.add("task1");
- 특정 용도(선입선출, 후입선출)에 맞춰 동적 사용 가능
✅ 4. Java Stream API 이용 (임시 데이터 처리 시)
import java.util.stream.IntStream;
int[] arr = IntStream.range(0, 10).toArray(); // 0~9로 구성된 배열
- 동적 크기로 Stream을 구성한 뒤 .toArray()로 배열로 변환
✅ 5. 직접 배열 재할당 (전통적인 방식)
int[] arr = new int[0]; // 처음엔 길이 0 // 새 값 추가
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, arr.length);
newArr[newArr.length - 1] = 100; arr = newArr;
- 자바 배열은 크기 변경 불가하므로 매번 새 배열로 복사
- 비효율적이지만 ArrayList 없이 구현 가능