Java의 벡터 대 ArrayList
ArrayList 및 Vector는 패키지에서 가장 일반적으로 사용되는 두 가지 클래스입니다collection Java와 Vector와 ArrayList의 차이점은 매우 자주 묻는 질문입니다. 이것은 간단한 질문이지만 특히 대규모 프로젝트에서 작업할 때 Vector 또는 ArrayList를 사용해야 할 때를 아는 것이 중요합니다.이 기사에서는 Java에서 Vector와 ArrayList의 차이점을 살펴보고 이러한 차이점 뒤에 숨겨진 개념을 이해하려고 노력할 것입니다.
Vector와 Vector의 차이점에 대해 알아보기 전에 및 ArrayList ,이 두 가지 사이의 유사점을 살펴 보겠습니다.
- Vector 및 ArrayList 는 확장 가능한 스토리지 구조를 사용합니다.
- ArrayList 및 Vector 는 내부 배열 구조를 사용합니다.
- 두 목록 모두 요소가 삽입되는 순서를 유지합니다. 즉, ArrayList 또는 Vector.
- Vector 및 ArrayList를 찾아보면 삽입된 순서대로 객체를 검색할 수 있으며 Vector 및 ArrayList에서 반환된 null 값은
- Iterator 및 listIterator fail-fast.
Vector 대 ArrayList
1) Synchronization
ArrayList가 동기화되지 않았으므로 여러 스레드가 동시에 액세스할 수 있습니다. 예를 들어 스레드가 ArrayList에서 추가 작업을 수행하는 경우 다른 스레드는 동기화되지 않은 다중 스레드 환경에서 병렬 삭제 작업을 수행할 수 있습니다.
Vector가 동기화됩니다. 이렇게 하면 동시 및 다중 스레드 환경에서 스레드를 안전하게 사용할 수 있습니다. 예를 들어, 스레드가 Vector에서 작업을 수행하는 경우 첫 번째 스레드가 완료될 때까지 다른 스레드가 해당 스레드에 액세스할 수 없습니다. ArrayList와 달리 한 번에 하나의 스레드만 작업을 수행할 수 있습니다.
2) Performance
ArrayList는 동기화되지 않기 때문에 성능이 더 뛰어나고 빠르기 때문에 단일 스레드 환경에서 매우 적합합니다. 스레드가 ArrayList.
Vector의 값만 읽는 경우 다중 스레드 환경에서 ArrayList를 사용할 수도 있습니다. 작업을 수행하는 스레드는 다른 스레드에 대한 액세스를 차단하므로 잠금이 해제 될 때까지 기다립니다.
Vector의 값만 읽는 경우 다중 스레드 환경에서 ArrayList를 사용할 수도 있습니다. 작업을 수행하는 스레드는 다른 스레드에 대한 액세스를 차단하므로 잠금이 해제 될 때까지 기다립니다.
3) 크기 조정
두 목록의 저장 용량은 확장 가능하거나 축소 가능합니다. Java 설계자는 최적의 스토리지 사용을 유지하기 위해 동적으로 만들었습니다. 그러나 각각 고유한 방법이 있습니다. ArrayList는 크기가 절반으로 커지고 Vector는 기본 크기를 두 배로 늘립니다. ArrayList의 용량은 ensureCapacity().
4) fail-fast
먼저 페일 패스트가 무엇인지 이해합시다. 컬렉션 (ArrayList, Vector 등)이 반복자 추가 및 제거 작업을 제외하고 수정되면 반복자가 생성 된 후 반복기가 예외를 발생시킵니다 ConcurrentModificationException입니다. 구조를 변경하는 것은 컬렉션에서 항목을 추가하거나 제거하는 것과 관련이 있습니다.
Vector는 elements() 실패하지 않습니다. 반면에 ArrayList에 의해 반환 된 Iterator 및 ListIterator 는 fail-fast입니다.
5) 컬렉션 프레임워크에 실제로 속하는 사람은 누구입니까?
Vector 는 JDK 1.0과 함께 제공되는 클래스 중 하나이며 처음에는 Collection 프레임 워크의 일부가 아니었지만 최신 버전에서는 List 인터페이스를 구현하기 때문에 고려되었습니다. 컬렉션의 일부가되었습니다.
ArrayList 프레임 워크는 JDK 1.2 릴리스와 함께 Vector 이후에 도입되었습니다. ArrayList는 Vector보다 더 고급이었지만 Vector의 모든 사양도 가지고 있었습니다. 그래서 사람들은 Vector 대신 ArrayList를 사용하기 시작했고, 이 경우 Vector는 레거시 클래스가 되었습니다.
The 동기화 작업은 동기화되지 않은 작업에 비해 많은 시간을 소비하므로 응용 프로그램을 더 빠르게 실행해야하고 동기화가 필요하지 않은 경우 ArrayList 가 성능면에서 올바른 선택이 될 것입니다.
이 표에는 우리가 본 5가지 차이점이 요약되어 있습니다.
4) fail-fast
먼저 페일 패스트가 무엇인지 이해합시다. 컬렉션 (ArrayList, Vector 등)이 반복자 추가 및 제거 작업을 제외하고 수정되면 반복자가 생성 된 후 반복기가 예외를 발생시킵니다 ConcurrentModificationException입니다. 구조를 변경하는 것은 컬렉션에서 항목을 추가하거나 제거하는 것과 관련이 있습니다.
Vector는 elements() 실패하지 않습니다. 반면에 ArrayList에 의해 반환 된 Iterator 및 ListIterator 는 fail-fast입니다.
5) 컬렉션 프레임워크에 실제로 속하는 사람은 누구입니까?
Vector 는 JDK 1.0과 함께 제공되는 클래스 중 하나이며 처음에는 Collection 프레임 워크의 일부가 아니었지만 최신 버전에서는 List 인터페이스를 구현하기 때문에 고려되었습니다. 컬렉션의 일부가되었습니다.
ArrayList 프레임 워크는 JDK 1.2 릴리스와 함께 Vector 이후에 도입되었습니다. ArrayList는 Vector보다 더 고급이었지만 Vector의 모든 사양도 가지고 있었습니다. 그래서 사람들은 Vector 대신 ArrayList를 사용하기 시작했고, 이 경우 Vector는 레거시 클래스가 되었습니다.
Vector 및 ArrayList는 언제 사용합니까?
필요에 따라 다르지만 코드가 프로세스(스레드)의 동기화를 수행하는 경우 한 번에 하나의 스레드만 컬렉션에 액세스하도록 하기 때문에 Vector가 최선의 선택이 될 것입니다.The 동기화 작업은 동기화되지 않은 작업에 비해 많은 시간을 소비하므로 응용 프로그램을 더 빠르게 실행해야하고 동기화가 필요하지 않은 경우 ArrayList 가 성능면에서 올바른 선택이 될 것입니다.
이 표에는 우리가 본 5가지 차이점이 요약되어 있습니다.
1) ArrayList가 동기화되지 않았습니다. | 벡터가 동기화되었습니다 |
2) ArrayList는 요소 수가 용량을 초과하면 현재 크기의 50 %를 증가시킵니다 < / td> | Vector invrementes 100 %, 요소 수가 용량을 초과하면 원래 크기의 두 배를 의미합니다 < / td> < / tr> |
3) ArrayList는 JDK 1.2. | Vector는 JDK 1.0에서 도입되었습니다 |
4) ArrayList는 동기화되지 않기 때문에 빠릅니다 | Vector는 동기화되기 때문에 느립니다. 경쟁이 치열한 환경에서는 첫 번째 스레드가 액세스를 허용할 때까지 다른 프로세스가 액세스하지 못하도록 차단합니다 |
5) ArrayList는 Iterator를 사용하여 요소를 반복합니다 | Vector는 Enumeration 인터페이스를 사용하여 요소를 반복하지만, Iterator 도 사용할 수 있습니다 |