ArrayList와 벡터의 차이
유사성 :
1. ArrayList 및 Vector는 동일한 상위 클래스를 상속하고 동일한 인터페이스를 구현합니다.
2. 하단 레이어는 배열에 의해 구현됩니다
3. 초기 기본 길이는 10입니다.
차이점 :
1. 동기화 :
벡터의 대부분의 공개 메소드는 동기화 된 키워드를 추가하여 메소드, 즉 벡터 스레드-안전 및 ArrayList 스레드가 안전하지 않도록합니다.
2. 다른 확장
다른 내부 속성이 다른 스케일링 방법의 이유 일 수 있습니다.
ArrayList에는 데이터를 저장하는 Array ElementData와 레코드 수를 저장하는 크기의 두 가지 속성이 있습니다.
벡터에는 세 가지 속성이 있습니다. 데이터를 저장하는 배열 요소 데이터, 레코드 수를 저장하는 요소 계산 및 배열 크기를 확장하는 확장 계수 용량 인식이 있습니다.
배열리스트 확장 방법
//jdk1.8.0_91 -private void grow (int mincapacity) {// 오버 플로우에 민감한 코드 int OldCapacity = elementData.length; int newCapacity = OldCapacity + (OldCapacity >> 1); if (newCapacity -MinCapacity <0) newCapacity = mincapacity; if (newCapacity -max_array_size> 0) newCapacity = hugecapacity (mincapacity); // mincapacity는 일반적으로 크기에 가깝기 때문에 이것은 다음과 같습니다. elementData = arrays.copyof (elementData, newCapacity); }확장 조건이 충족되면 확장 배열 크기는 원래 배열 길이의 1.5 배이고 전달 된 매개 변수의 더 큰임을 알 수 있습니다.
벡터 확장 방법
//jdk1.8.0_91 -private void grow (int mincapacity) {// 오버 플로우에 민감한 코드 int OldCapacity = elementData.length; int newCapacity = OldCapacity + ((AppartionInCrement> 0)? 용량 인증 : OldCapacity); if (newCapacity -MinCapacity <0) newCapacity = mincapacity; if (newCapacity -max_array_size> 0) newCapacity = hugecapacity (mincapacity); elementData = arrays.copyof (ElementData, newCapacity); }확장 계수가 0보다 클 때 새 배열의 길이는 원래 배열 길이 + 확장 계수이며, 그렇지 않으면 서브 새로운 배열의 길이는 원래 배열의 길이의 두 배임을 알 수 있습니다. 위에서 생성 된 새로운 배열 길이와 전달 된 매개 변수 길이를 비교하면 더 큰 배열 길이는 최종 새로운 길이입니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!