java ArrayList 의 용량 용량 용량 보기

1543 단어 자바
방금 Array List 의 소스 코드 를 자세히 연구 한 결과 자동 확장 공식 이 capacity = capacity + (capacity > > 1) (간략화 후) 인 것 을 검증 하고 싶 습 니 다.
capacity 는 element 배열 의 크기 이 고 element 배열 은 개인 적 인 것 이기 때문에 반사 접근 을 생각 합 니 다.
import java.lang.reflect.Field;
import java.util.ArrayList;

public class Test{
    public static void main(String args[]) {
        ArrayList arrayList = new ArrayList<>();

        System.out.println(getArrayListCapacity(arrayList));

        //    ,    
        arrayList.add(0);
        System.out.println(getArrayListCapacity(arrayList));

        for(int i = 0; i < 10; ++i)
            arrayList.add(0);
        System.out.println(getArrayListCapacity(arrayList));

        for(int i = 0; i < 5; ++i)
            arrayList.add(0);
        System.out.println(getArrayListCapacity(arrayList));
    }

    public static int getArrayListCapacity(ArrayList> arrayList) {
        Class arrayListClass = ArrayList.class;
        try {
            Field field = arrayListClass.getDeclaredField("elementData");
            field.setAccessible(true);
            Object[] objects = (Object[])field.get(arrayList);
           return objects.length;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
            return -1;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return -1;
        }
    }
}

출력:
0
10
15
22
첫 번 째 용량 을 10 으로 늘 린 후 매번 용량 을 절반 으로 늘 렸 다.

좋은 웹페이지 즐겨찾기