카테고리 없음

[JAVA] 배열 동적으로 사용하는 법(길이 지정X)

경상도상남자 2025. 6. 19. 16:40
방법 특징
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 없이 구현 가능