우선, 목록 인터페이스를 구현하는 두 범주를 모두 검토하며 List Interface에는 ArrayList, Vector 및 LinkedList의 세 가지 구현 클래스가 있습니다. 목록은 여러 요소를 저장하고 요소의 순서를 유지할 수 있으며 요소를 반복 할 수 있습니다.
세 가지 구현 클래스 간의 관련 차이점은 다음과 같습니다.
1. ArrayList 는 가장 일반적으로 사용되는 목록 구현 클래스로, 배열을 통해 내부적으로 구현되어 요소에 빠르게 무작위로 액세스 할 수 있습니다. 배열의 단점은 각 요소 사이에 간격이 없다는 것입니다. 배열 크기가 만족되지 않으면 스토리지 용량을 증가시켜야합니다. 이미 배열의 데이터가 새로운 저장 공간에 복사되었다고 말해야합니다. Arraylist의 중간 위치에서 요소를 삽입하거나 삭제할 때 배열을 복사, 이동 및 비용이 상대적으로 높습니다. 따라서 삽입 및 삭제에 적합하지 않은 임의의 조회 및 횡단에 적합합니다.
2. 벡터는 또한 배열을 통해 구현되며, 차이점은 스레드 동기화를 지원한다는 것입니다. 즉, 특정 순간에 하나의 스레드만이 여러 스레드가 동시에 쓰기로 인한 불일치를 피하기 위해 벡터를 작성할 수 있지만 동기화를 구현하는 데 많은 비용이 들기 때문에 액세스는 어레이리스트에 액세스하는 것보다 느리게됩니다.
3. LinkedList는 링크 된 목록 구조를 사용하여 데이터를 저장하는데, 이는 데이터의 동적 삽입 및 삭제에 매우 적합하며 임의의 액세스 및 트래버스 속도는 비교적 느립니다. 또한 목록 인터페이스에 정의되지 않은 메소드를 제공하며 테이블 헤더 및 테일 요소를 작동하는 데 특별히 사용되며 스택, 큐 및 양방향 대기열로 사용할 수 있습니다.
Java 소스 코드를 살펴보면 배열의 크기가 충분하지 않으면 배열을 다시 제작 한 다음 요소를 새 배열로 복사해야한다는 것을 알았습니다. Arraylist 및 Vector의 확장 배열의 크기는 다릅니다.
ArrayList :
public boolean add (e e) {ensurecapacity (size + 1); // 요소를 추가하여 수용 할 수 있는지 여부를 결정합니다. 할 수 없다면 새 배열 Emplicerdata [size ++] = e를 만들어야합니다. Return true;} public void ensurecapacity (int mincapacity) {modcount ++; int OldCapacity = ElementData.length; if (minCapacity> OldCapacity) {Object OldData [] = ElementData; //이 줄은 유용성을 보여주지 않았으며, 개발자가 int newCapacity = (OldCapacity * 3)/2 + 1에 대해 무엇을 생각하고 있는지 모르겠습니다. // 새로운 배열의 크기를 추가하면 (newCapacity <mincapacity) newCapacity = mincapacity; // mincapacity는 일반적으로 크기에 가깝기 때문에 이것은 다음과 같습니다. elementData = arrays.copyof (elementData, newCapacity); }}벡터 :
개인 void ensurecapacityHelper (int mincapacity) {int oldcapacity = elementData.length; if (minCapacity> OldCapacity) {Object [] OldData = ElementData; int newCapacity = (AppartionIncrement> 0)? (OldCapacity + AppartionIncrement) : (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = arrays.copyof (ElementData, newCapacity); }}ArrayList와 Vector의 차이점은 다음과 같습니다.
메모리가 충분하지 않은 경우 ArrayList는 기본적으로 50% + 1로 확장되고 벡터가 기본적으로 1 배 확장됩니다.
벡터는 indexof (OBJ, Start) 인터페이스를 제공하지만 ArrayList는 그렇지 않습니다.
벡터는 스레드 안전 수준이지만 대부분의 경우 스레드 안전에 더 큰 시스템 오버 헤드가 필요하기 때문에 벡터가 사용되지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.