Java로 코딩테스트 공부를 조금씩 하던 도중 배열을 계속 사용하게 됐는데, 정적 배열과 동적 배열을 자꾸 사용하다보니 헷갈리는 부분이 많아 정리 해보고자 한다.
복잡한 이론보다는 실제로 바로 사용할 수 있게 함수 위주로 정리 할 예정이다.
정적 배열은 크기가 고정된 배열로, 생성 시 배열의 크기를 지정해야 하며, 이후에는 크기를 변경할 수 없다.
- 크기가 고정됨: 배열을 생성할 때 지정된 크기를 변경할 수 없다.
- 빠른 액세스: 인덱스를 사용하여 배열 요소에 빠르게 접근할 수 있다.
- 메모리 사용: 배열의 크기가 고정되어 있으므로, 미리 할당된 메모리 공간을 사용한다.
int[] myArray = new int[5];
크기가 5인 정수형 배열을 생성
// 배열에 값 할당
myArray[0] = 10;
myArray[1] = 20;
myArray[2] = 30;
myArray[3] = 40;
myArray[4] = 50;
// 배열 값 읽기
int value = myArray[2]; // value에는 30이 저장됨
// 배열 크기 확인
int size = myArray.length; // size에는 배열의 크기인 5가 저장됨
// 오름차순 정렬
Arrays.sort(myArray);
// 내림차순 정렬
Arrays.sort(myArray, Collections.reverseOrder());
// 배열 값 교체
myArray[0] = 4;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 정적 배열
int[] staticArray = { 1, 2, 3, 4, 5 };
// 동적 배열로 변환
ArrayList<Integer> dynamicList = new ArrayList<>();
for (int num : staticArray) {
dynamicList.add(num);
}
System.out.print(dynamicList);
//[1, 2, 3, 4, 5]
}
}
public class StaticArrayExample {
public static void main(String[] args) {
// 크기가 5인 정적 배열 선언
int[] staticArray = new int[5];
// 배열에 값 할당
staticArray[0] = 10;
staticArray[1] = 20;
staticArray[2] = 30;
staticArray[3] = 40;
staticArray[4] = 50;
// 배열의 값 출력
for (int i = 0; i < staticArray.length; i++) {
System.out.println("Element at index " + i + ": " + staticArray[i]);
}
}
}
동적 배열은 크기가 변할 수 있는 배열로, ArrayList와 같은 컬렉션 클래스를 사용하여 구현할 수 있다. 필요에 따라 요소를 추가하거나 제거할 수 있다.
크기 변경 가능: 배열의 크기를 런타임 시에 변경할 수 있다.
요소 추가/제거: add(), remove() 메서드를 사용하여 요소를 추가하거나 제거할 수 있다.
자동 리사이징: 내부적으로 크기가 자동으로 조정된다.
ArrayList<Integer> list = new ArrayList<>();
<> 안에는 참조 타입을 선언할 수 있다. Integer, String 등 첫글자는 대문자로 시작해야한다.
초기 크기는 10이다.
arrayList. add(); // ArratList에 원소 추가
arrayList. remove(); // 괄호에 들어있는 인덱스 번호의 원소를 지운다. // 삭제한 데이터를 반환한다.
// 위치, 객체 둘다 매개변수로 줄 수 있다.
arrayList. clear(); // 모든 데이터를 삭제한다.
arrayList. get(); // 괄호에 들어있는 인덱스 번호의 원소를 반환한다.
arrayList. size(); // ArratList의 크기를 반환한다.
Collections.sort(arrayList); // 오름차순 정렬
Collections.sort(arrayList, Collections.reverseOrder()); // 내림차순 정렬
Integer[] array = arrayList.toArray(new Integer[0]); // ArrayList를 배열로 변환
import java.util.ArrayList;
public class DynamicArrayExample {
public static void main(String[] args) {
// 동적 배열(ArrayList) 선언
ArrayList<Integer> dynamicArray = new ArrayList<>();
// 배열에 값 추가
dynamicArray.add(10);
dynamicArray.add(20);
dynamicArray.add(30);
dynamicArray.add(40);
dynamicArray.add(50);
// 배열의 값 출력
for (int i = 0; i < dynamicArray.size(); i++) {
System.out.println("Element at index " + i + ": " + dynamicArray.get(i));
}
// 값 제거
dynamicArray.remove(2); // 인덱스 2의 값 제거
// 배열의 값 출력 (변경 후)
System.out.println("After removal:");
for (int i = 0; i < dynamicArray.size(); i++) {
System.out.println("Element at index " + i + ": " + dynamicArray.get(i));
}
}
}
| 특징 | 정적 배열 (Static Array) | 동적 배열 (Dynamic Array) |
|---|---|---|
| 크기 | 고정 | 가변 |
| 요소 추가/제거 | 불가능 (고정 크기 내에서만 가능) | 가능 (메서드를 통해 추가/제거) |
| 선언 방식 | int[] arr = new int[5]; | ArrayList<Integer> list = new ArrayList<>(); |
| 성능 | 메모리 및 접근 속도에서 더 효율적 | 요소 추가/제거 시 오버헤드 발생 가능 |
https://what-am-i.tistory.com/63
https://zks145.tistory.com/m/62
ChatGPT