이 기사는 주로 Java Arraylist 확장 문제 예제의 내용을 다음과 같이 연구합니다.
우선, 우리는 Arraylist의 본질이 실제로 객체 유형 배열이라는 것을 알아야합니다. ArrayList의 확장 문제는 실제로이 객체 유형 배열의 확장 문제입니다.
과도 객체 [] elementData;
Arraylist를 만드는 세 가지 상황이 있습니다
ArrayList al = new ArrayList ();
생성이 완료된 후 AL의 용량은 0입니다. 다음 코드에서 알 수 있습니다.
과도 객체 [] elementData; private static final 객체 [] defaultCapacity_Empty_ElementData = {}; public arrayList () {this.ElementData = defaultCapacity_Empty_ElementData;}ArrayList al = New ArrayList (5);
용량이 5 인 ArrayList 객체를 작성하는 것은 실제로 길이가 5 인 객체 배열입니다. 다음 코드에서 알 수 있습니다.
과도 객체 [] elementData; 개인 정적 최종 개체 [] defaultCapacity_Empty_ElementData = {}; public arrayList (int initialCapacity) {if (initialCapacity> 0) {this.elementData = 새 개체 [초기 범위]; } else if (initialCapacity == 0) {this.ElementData = empty_elementData; } else {throw new ImperalArgumentException ( "불법 용량 :"+ 초기 범위); }}ArrayList al = new ArrayList <integer> (arrays.aslist (1, 2, 3, 4, 5));
Arraylist 객체는 위에서 생성되고 목록을 [1,2,3,4,5]로 사용하여 초기화됩니다. 실제로, 그것은 길이 5의 객체 배열을 생성하고 배열의 내용은 [1, 2, 3, 4, 5]입니다. 다음 코드에서 알 수 있습니다.
비공개 int 크기; 과도 객체 [] ElementData; private static final object [] defaultCapacity_Empty_ElementData = {}; public arraylist (collection <? extends e> c) {elementData = c.toArray (); if (size = elementData.length)! = 0) {// c.toArray는 객체를 반환 할 수 없을 수 있습니다. } else {// 빈 배열로 교체합니다. this.elementData = empty_elementData; }} ArrayList <integer> collection = new ArrayList <integer> (arrays.aslist (1, 2, 3, 4, 5); integer [] moreints = {6, 7, 8, 9, 10}; collection.addall (arrays.aslist (moreints)); 1. 내용 [1, 2, 3, 4, 5]의 크기 5 인 Arraylist를 만듭니다. - 초기 용량은 5입니다
2.이 배열리스트 개체에 {6, 7, 8, 9, 10} 세트를 추가하십시오. ---이 시점 에서이 Arraylist 객체의 용량은 확장되어야합니다.
public boolean addall (collection <? extends e> c) {// 삽입 배열 객체 [] a = c.toArray (); 삽입 내용 길이 가져옵니다 int numnew = a.length; ensurecapacitysionnternal (size + numnew); // icomment modcountsystem.arraycopy (a, 0, elegementdata, size!); 0;} private void ensurecapacity internal (int mincapacity) {// arraylist의 내용이 비어있는 경우 (elementData == defaultCapacity = math.max (default_capacity, mincapacity);} intricitcapacity (mincapacity);}; {modcount ++; // 확장 된 크기를 추가로 계산하십시오 MinCapacityif (mincapacity -ElementData.length> 0) grow (mincapacity);} private void grow (int mincapacity) {// arraylist의 원래 크기 int oldcapacity = elementData.length; // extanded int int int int int int int int int int int int int int int int int int int int int int int int int int int int ints 크기는 확장 된 크기를 계산합니다. OldCapacity + (OldCapacity >> 1); // 이전에 계산 된 확장 길이 MinCapacity와 비교하고 (NewCapacity -MinCapacity <0) NewCapacity = MinCapacity; // 팽창 길이가 최대 길이보다 큰 경우 (newCapacity -MincApacity> 0) NewCapacity (//capacity); 확장 요소 data = arrays.copyof (ElementData, NewCapication);} 개인 정적 int hugecapacity (int mincapacity) {// mincapacity는 0보다 작습니다. max_array_size)? integer.max_value : max_array_size;} 1. ArrayList의 원래 크기 + 삽입 할 컬렉션의 크기 숫자 NumNew = 확장 된 ArrayList MinCapacity의 최소 길이를 얻으십시오.
2. ArrayList의 원래 크기가 0 인 경우, 즉, ArrayList는 비어있는 경우, 확장 후 MinCapacity = Math.Max (10, mincapacity)의 최소 arraylist 길이는 비어 있습니다.
3. 위에서 얻은 최소 길이의 최소 길이는 최종 확장 길이가 아니며 추가 계산이 필요합니다.
(1) Arraylist OldCapacity의 원래 크기를 얻으십시오
(2) 새로운 확장 크기를 얻으십시오 : NewCapacity = OldCapacity*1.5;
(3) 위에서 계산 된 확장 된 최소 길이의 최소 용량을 여기에서 얻은 확장 된 크기의 새로운 용량과 비교하고 더 큰 것을 최종 확장 크기로 취하십시오.
위의 내용은이 기사의 Arraylist 확장 문제 예에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!