728x90
ArrayList와 Vector의 차이점
ArrayList와 Vector는 둘 다 Java에서 제공하는 동적 배열 구현체입니다. 그러나 몇 가지 중요한 차이점이 있습니다.
1. 동기화(Synchronization) 지원 여부
- Vector
- 동기된 메서드로 구현되어 멀티스레드 환경에서 안전하게 사용할 수 있음
- 여러 스레드가 동시에 접근하여 수정할 때 스레드 안정성 보장
- ArrayList
- 동기화를 지원하지않기 때문에 Vector보다 더 빠름
- 단일 스레드 환경이거나 개발자가 명시적으로 동기화를 처리해야하는 경우에 사용
2. 성능
- ArrayList 는 동기화를 지원하지 않기 때문에 Vector보다 더 빠름
- 작업량이 많고 복잡한 멀티스레드 환경이 아니라면 ArrayList가 성능 면에서 더 유리함
3. 용량 증가
- ArrayList
- 요소가 추가될 때 동적으로 크기를 증가시킴
- 일반적으로 현재 크기보다 약간 더 큰 새로운 배열을 생성하여 요소를 복사함
- Vector
- 크기가 증가할 때마다 기본적으로 2배씩 크기를 늘림
- 요소가 추가될 때 더 많은 메모리를 할당하므로 사용량이 더 크게 증가할 수 있음
4. 초기 용량 설정
- ArrayList
- 초기 용량을 설정할 수 있는 생성자를 제공
- 초기 용량을 설정하면 필요한 만큼 배열을 미리 할당할 수 있어 재할당이 발생하지 않음
- Vector
- 초기 용량을 설정하는 생성자가 없으며, 기본적으로 10개의 요소를 저장할 수 있는 용량으로 시작
5. API 호환성
- ArrayList와 Vector는 모두 List 인터페이스를 구현하므로 동일한 방식으로 사용할 수 있음
- 따라서 대부분의 메서드들은 상호교환이 가능함
요약
ArrayList는 동기화를 지원하지 않고 성능이 더 뛰어나며, 초기 용량 설정이 가능합니다.
Vector는 동기화를 지원하며, 멀티스레드 환경에서 스레드 안전성을 제공합니다.
Array와 ArrayList의 차이점
1. 크기 조정
- Array
- 정적으로 크기가 고정되어 있으며, 한 번 생성된 후에는 크기를 변경할 수 없음
- ArrayList
- 동적으로 크기를 조절할 수 있음
- 요소를 추가하거나 제거할 때 내부적으로 크기가 자동으로 조정됨
2. 자료형
- Array
- 특정 자료형의 요소들을 저장하는 것이 가능
- 예 ) int, double, String과 같은 자료형을 배열에 저장할 수 있음
- ArrayList
- 제네릭을 사용하여 다양한 자료형의 요소를 저장할 수 있음
3. 기능과 메서드
- Array
- 간단한 인덱스 기반의 접근과 기본적인 배열 기능을 제공
- ArrayList
- List 인터페이스를 구현하며, 다양한 메서드를 제공하여 요소를 추가,제거,탐색, 정렬 함
- ArrayList 가 더 많은 기능을 제공하며, 개발자가 유연하게 요소를 다룰 수 있도록 함
4. 메모리 할당
- Array
- 요소의 크기를 고정하므로 초기에 정해진 크기만큼 메모리를 할당
- ArrayList
- 요소를 동적으로 추가하고 제거할 수 있으므로, 내부적으로 크기를 조정하고 필요에 따라 메모리 재할당
5. 다차원 배열
- Array
- 다차원 배열을 직접적으로 지원
- int[][] 로 2차원 배열을 생성할 수 있음
- ArrayList
- 내부적으로 1차원 배열을 사용
- 다차원 ArrayList를 사용하기 위해선 중첩된 ArrayList를 생성해야 함
6. 성능
- Array
- 간단한 인덱스 기반 접근 가능하기 때문에 메모리 사용량과 접근 시간면에서 효율적
- ArrayList
- 크기 조정과 객체 관리 등 추가적인 작업을 수행하기 때문에 상대적으로 성능이 떨어질 수 있음
- 그러나 대부분의 경우에는 이 차이가 미미하며, 편리한 기능을 사용하기 위해 ArrayList 를 선호
요약
Array는 정적 크기의 배열로 메모리를 더 효율적으로 사용하고 빠른 접근이 가능합니다.
ArrayList는 동적 크기의 배열로 다양한 기능을 제공하며, 요소를 효율적으로 추가, 제거, 탐색할 수 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayExample {
public static void main(String[] args) {
// Array 예시
int[] array = new int[5];
// 요소 할당
array[0] = 10;
array[1] = 20;
array[2] = 30;
// 요소 접근
System.out.println("Array의 두 번째 요소: " + array[1]);
// 배열 초기화
int[] initializedArray = {40, 50, 60};
// ArrayList 예시
ArrayList<String> arrayList = new ArrayList<>();
// 요소 추가
arrayList.add("사과");
arrayList.add("바나나");
arrayList.add("오렌지");
// 요소 접근
System.out.println("ArrayList의 첫 번째 요소: " + arrayList.get(0));
// ArrayList 배열로 변환
String[] convertedArray = arrayList.toArray(new String[0]);
// 배열 출력
System.out.println("Converted Array: " + Arrays.toString(convertedArray));
}
}
Array의 두 번째 요소: 20
ArrayList의 첫 번째 요소: 사과
Converted Array: [사과, 바나나, 오렌지]
728x90
'2.Container' 카테고리의 다른 글
Iterator (0) | 2023.07.19 |
---|---|
Queue에서, poll()과 remove()의 차이 (0) | 2023.07.19 |
ArrayList, LinkedList 차이점 / Array -> List 로 전환하려면? (0) | 2023.07.14 |
HashMap vs Hashtable / HashMap vs TreeMap / HashSet (0) | 2023.07.13 |
Collection과 Collections의 차이는? / List, Set, Map의 차이점 (0) | 2023.07.12 |