2012-08-30 5 views
1

Java에서 Collection을 만드는 데 사용한 초기 용량을 확인하는 방법이 있습니까?Java Collection의 초기 용량을 결정할 수 있습니까?

그래서 콜렉션이 같은 만들 때 :

List<Object> objectList = new ArrayList<Object>(5); 

5의 초기 용량으로 생성 된 objectList을 알 수있는 방법이 있습니까?

+2

당신이 왜 이것을 원하는지 이해하는 것은 흥미로울 수 있습니다. –

+1

ArrayList의 현재 용량을 알고 싶다면이 질문이 흥미 롭습니다. http://stackoverflow.com/questions/3564837/capacity-of-arraylist 답변 중 하나는 용량을 확보 할 수있는 리플렉션 해킹입니다. 그래도 좋은 생각은 아닙니다. – Magicode

+0

@dystroy 왜 내가 설정했는지는 궁금했지만 할당 된 공간이 얼마 남았는지 확인할 수는 없습니다. –

답변

5

아니, ArrayList 클래스는 내부 배열의 크기 조정을 필요로하는 ArrayList의에 대한 작업에 대해 걱정하는 경우에.

전달 originalCapacity 값의 적어도 does not keep track, 당신은 항상 ArrayList.ensureCapacity(int)를 호출 할 수 있습니다.

+0

그래서'ensureCapacity'를 호출 할 필요가 있는지를 알 수있는 방법이 없습니다. 나는 그 때 그것을 알 필요가 없다고 생각합니다. –

+2

@ Jasper 내부 배열이 이미 충분히 큰 경우'ensureCapacity'를 호출하면 아무 것도하지 않습니다. 이것은 어쨌든 크기를 확인할 가상 함수를 호출하는 것 이상의 비용이 들지 않습니다. – verdesmarald

0

API에서 볼 수있는 한 그러한 메소드가 없습니다.

은 그러나 당신이 할 수있는 것은 다음과 같이 ArrayList의 서브 클래스입니다 :

class MyArrayList<T> extends ArrayList<T> { 
    private final int initialCapacity; 

    public MyArrayList(final Integer initialCapacity) { 
     super(initialCapacity); 

     this.initialCapacity = initialCapacity;  
    } 

    public Integer getInitialCapacity() { 
     return this.initialCapacity; 
    } 
} 

이 그럼 당신은이 작업을 수행 할 수 있습니다

final List<Integer> li = new MyArrayList<Integer>(5); 
    ((MyArrayList) li).getInitialCapacity(); 
0

당신은 할 수 없습니다. 컬렉션에 항목을 추가하더라도 "toArray (...)"로 생성 된 배열은 추가 된 항목의 길이 만됩니다. 또한 size()는 추가 된 요소 수만 반환합니다.

관련 문제