[java] ArrayList와 Vector의 차이점은 무엇입니까?

두 데이터 구조 ArrayListVector 의 차이점은 무엇이며 각각의 위치를 ​​어디에서 사용해야합니까?



답변

차이점

  • 벡터는 동기화되고 ArrayList는 동기화되지 않습니다.
  • 데이터 성장 방법

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.


답변

VectorA는 깨진 입니다 클래스 하지 가 “동기화”되고되고에도 불구하고, 스레드 학생들과 다른 경험이 프로그래머에 의해 사용되는.

ArrayList 전문가와 숙련 된 프로그래머가 사용하는 Go-to List 구현입니다.

스레드 세이프 목록 구현을 원하는 전문가는를 사용합니다 CopyOnWriteArrayList.


답변

ArrayList 더 새롭고 20-30 % 빠릅니다.

에서 명백하게 명백한 것이 필요하지 않은 Vector경우ArrayList


답변

Vector와 ArrayList에는 크게 두 가지 차이점이 있습니다.

  1. 벡터는 기본적으로 동기화되며 ArrayList는 동기화되지 않습니다. 참고 : arraylist 객체를 Collections.synchronizedList () 메서드에 전달하여 ArrayList도 동기화 할 수 있습니다. 동기화 된 수단 : 부작용없이 여러 스레드와 함께 사용할 수 있습니다.

  2. 새 요소에 공간이 충분하지 않으면 ArrayLists가 이전 크기의 50 % 증가합니다. 여기서 새 수신 요소에 대한 공간이 없으면 Vector가 이전 크기의 100 % 증가합니다.

이 외에도 프로그래밍 노력 측면에서 실질적인 차이점이 있습니다.

  1. Vector에서 특정 위치의 요소를 가져 오기 위해 elementAt (int index) 함수를 사용합니다. 이 함수 이름은 매우 길다. ArrayList에서 이것을 대신하여 우리는 기억하고 사용하기 매우 쉬운 (int index)를 얻습니다 .
  2. 마찬가지로 Vector에서 기존 요소를 새 요소로 바꾸려면 setElementAt () 메서드를 사용하면 다시 길어지고 프로그래머가 반복적으로 사용하도록 자극 할 수 있습니다. 이 ArrayList 대신 사용하고 기억하기 쉬운 add (int index, object) 메소드가 있습니다. 이와 같이 그들은 ArrayList에서 더 프로그래머 친화적이고 사용하기 쉬운 함수 이름을 가지고 있습니다.

언제 사용합니까?

  1. 벡터를 완전히 사용하지 마십시오. ArrayLists는 Vector가 할 수있는 모든 것을 할 수 있습니다. 기본적으로 더 많은 ArrayList는 동기화되지 않습니다. 원하는 경우 Collections util 클래스를 사용하여 필요할 때 언제든지 동기화 할 수 있습니다.
  2. ArrayList는 기억하기 쉽고 함수 이름을 사용합니다.

참고 : arraylist가 100 % 증가하더라도 ensurecapacity () 메서드를 사용하면 초기 단계에서 충분한 메모리를 할당 할 수 있으므로이를 피할 수 있습니다.

도움이 되길 바랍니다.


답변

ArrayList그리고 Vector모두 구현 목록 인터페이스 및 삽입을 유지 틀리지 사이에는 많은 차이가 ArrayListVector클래스는 …

배열 목록

  1. ArrayList 동기화되지 않았습니다.
  2. ArrayList 요소 수가 용량을 초과하면 현재 배열 크기의 50 %를 증가시킵니다.
  3. ArrayList 레거시 클래스가 아니며 JDK 1.2에 도입되었습니다.
  4. ArrayList 동기화되지 않았기 때문에 빠릅니다.
  5. ArrayList Iterator 인터페이스를 사용하여 요소를 순회합니다.

스톡 콘텐츠

  1. Vector 동기화됩니다.
  2. Vector 100 % 씩 증가는 요소의 총 수가 용량을 초과하면 배열 크기가 두 배가됨을 의미합니다.
  3. Vector 레거시 클래스입니다.

  4. Vector 멀티 스레딩 환경에서 동기화되기 때문에 속도가 느립니다. 즉, 현재 스레드가 객체 잠금을 해제 할 때까지 다른 스레드를 실행 가능 또는 실행 불가능 상태로 유지합니다.

  5. VectorEnumeration 인터페이스를 사용하여 요소를 순회합니다. 그러나 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는 용량이 증가되는 양 때 벡터 오버 플로우가 부하율보다 효율적으로 제어 할 수 있으므로.

다른 차이점은 다음과 같습니다.
여기에 이미지 설명을 입력하십시오