답변:
차이점
Vector를 사용하기위한 특정 요구 사항이없는 경우 ArrayLists를 사용하십시오.
동기화
여러 스레드가 동시에 ArrayList에 액세스하는 경우 목록을 구조적으로 또는 간단하게 수정하는 코드 블록을 외부에서 동기화해야합니다. 구조적 수정은 목록에서 요소를 추가 또는 삭제하는 것을 의미합니다. 기존 요소의 값을 설정하는 것은 구조적인 수정이 아닙니다.
Collections.synchronizedList
목록에 실수로 동기화되지 않은 액세스를 피하기 위해 일반적으로 목록을 만들 때 사용됩니다.
데이터 증가
내부적으로 ArrayList와 Vector는 모두 Array를 사용하여 내용을 유지합니다. 요소가 ArrayList 또는 Vector에 삽입 될 때 객체의 공간이 부족하면 내부 배열을 확장해야합니다. Vector는 기본적으로 배열 크기를 두 배로 늘리는 반면 ArrayList는 배열 크기를 50 % 증가시킵니다.
설명서에서 알 수 있듯이 a Vector
와 a ArrayList
는 거의 같습니다. 차이점은 a에 대한 액세스 Vector
는 동기화되지만 a에 대한 액세스 는 동기화 ArrayList
되지 않는다는 것입니다. 이것은 한 번에 하나의 스레드 만 메소드를 호출 할 수 Vector
있으며 잠금을 얻는 데 약간의 오버 헤드가 있음을 의미합니다. 을 사용하는 ArrayList
경우에는 그렇지 않습니다. 일반적으로 ArrayList
; 단일 스레드의 경우 더 나은 선택이며, 다중 스레드의 경우 잠금을보다 잘 제어 할 수 있습니다. 동시 읽기를 허용 하시겠습니까? 좋아. 10 회의 쓰기로 한 번의 동기화를 원하십니까? 또한 괜찮습니다. 그것은 약간의주의를 기울여야하지만, 원하는 것 같습니다. 또한 ArrayList가 있으면 다음을 사용할 수 있습니다.Collections.synchronizedList
함수는 동기화 된 목록을 생성하여 a와 동등한 것을 얻습니다 Vector
.
Vector
A는 깨진 입니다 클래스 하지 가 "동기화"되고되고에도 불구하고, 스레드 만 학생들과 다른 경험이 프로그래머에 의해 사용되는.
ArrayList
전문가와 숙련 된 프로그래머가 사용하는 Go-to List 구현입니다.
스레드 세이프 목록 구현을 원하는 전문가는를 사용합니다 CopyOnWriteArrayList
.
Vector
는 스레드 세이프 를 의도 했지만 실제로 스레드 세이프 가 아닌 디자인 결함이 있습니다. 기본적으로 더 이상 사용되지 않는 클래스입니다. 어떤 이유로, 대학 등은이 소식에 대해 들어 보지 못했지만 여전히 그 사용을 옹호합니다.
ArrayList
더 새롭고 20-30 % 빠릅니다.
에서 명백하게 명백한 것이 필요하지 않은 Vector
경우ArrayList
20-30% faster
?
Vector와 ArrayList에는 크게 두 가지 차이점이 있습니다.
벡터는 기본적으로 동기화되며 ArrayList는 동기화되지 않습니다. 참고 : arraylist 객체를 Collections.synchronizedList () 메서드에 전달하여 ArrayList도 동기화 할 수 있습니다. 동기화 된 수단 : 부작용없이 여러 스레드와 함께 사용할 수 있습니다.
새 요소에 공간이 충분하지 않으면 ArrayLists가 이전 크기의 50 % 증가합니다. 여기서 새 수신 요소에 대한 공간이 없으면 Vector가 이전 크기의 100 % 증가합니다.
이 외에도 프로그래밍 노력 측면에서 실질적인 차이점이 있습니다.
언제 사용합니까?
참고 : arraylist가 100 % 증가하더라도 ensurecapacity () 메서드를 사용하면 초기 단계에서 충분한 메모리를 할당 할 수 있으므로이를 피할 수 있습니다.
도움이 되길 바랍니다.
ArrayList
그리고 Vector
모두 구현 목록 인터페이스 및 삽입을 유지 틀리지 사이에는 많은 차이가 ArrayList
및 Vector
클래스는 ...
배열 목록 -
ArrayList
동기화되지 않았습니다.ArrayList
요소 수가 용량을 초과하면 현재 배열 크기의 50 %를 증가시킵니다.ArrayList
레거시 클래스가 아니며 JDK 1.2에 도입되었습니다.ArrayList
동기화되지 않았기 때문에 빠릅니다.ArrayList
Iterator 인터페이스를 사용하여 요소를 순회합니다.스톡 콘텐츠 -
Vector
동기화됩니다.Vector
100 % 씩 증가는 요소의 총 수가 용량을 초과하면 배열 크기가 두 배가됨을 의미합니다.Vector
레거시 클래스입니다.
Vector
멀티 스레딩 환경에서 동기화되기 때문에 속도가 느립니다. 즉, 현재 스레드가 객체 잠금을 해제 할 때까지 다른 스레드를 실행 가능 또는 실행 불가능 상태로 유지합니다.
Vector
Enumeration 인터페이스를 사용하여 요소를 순회합니다. 그러나 Iterator도 사용할 수 있습니다.
참조 : https://www.javatpoint.com/difference-between-arraylist-and-vector
기본적으로 ArrayList와 Vector는 모두 내부 Object Array를 사용합니다.
ArrayList : ArrayList 클래스는 AbstractList를 확장하고 List 인터페이스와 RandomAccess (마커 인터페이스)를 구현합니다. ArrayList는 필요에 따라 확장 할 수있는 동적 배열을 지원합니다. 요소에 대한 첫 번째 반복을 제공합니다. ArrayList는 내부 객체 배열을 사용합니다. 기본 초기 크기는 10으로 작성됩니다.이 크기를 초과하면 콜렉션이 자동으로 기본 크기의 절반 인 15로 증가합니다.
Vector : Vector는 ArrayList와 유사하지만 차이점은 동기화되며 기본 초기 크기는 10이며 크기를 초과 할 때 크기가 원래 크기의 두 배로 증가하면 새 크기는 20이됩니다. Vector는 유일한 클래스입니다. RandomAccess를 구현하는 ArrayList 이외의 벡터는 하나 중 4 생성자 데하여 두 개의 매개 변수 벡터 (INT 파라미터 : initialCapacity, INT은 capacityIncrement) 은 capacityIncrement는 용량이 증가되는 양 때 벡터 오버 플로우가 부하율보다 효율적으로 제어 할 수 있으므로.
다른 차이점은 다음과 같습니다.