제목에 언급했듯이 초기 용량이 500 인 ArrayList를 만든 다음 얼마 후에 지우면 용량이인데도 여전히 500입니까? 아니면 다시 초기화해야합니까?ArrayList를 지우면 해당 용량이 보존됩니까?
1
A
답변
2
예, 용량은 그대로 유지됩니다. (적어도이 아닌 오라클 VM의 구현에) :
/**
* Removes all of the elements from this list. The list will
* be empty after this call returns.
*/
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
그냥 명확하게하기 :
ArrayList
는 배열에 연동 (예 : INT [] ArrayList를위한) 당신이 가서 때마다 해당 배열이 확장됩니다 용량을 늘리려면 새로운 어레이를 만들고이를 복사해야합니다. 정리 (코드에서 볼 수 있듯이)는 더 작은 새로운 배열을 만들고 거기에 복사하고 이전의 큰 배열을 파괴하지 않습니다.
1
아니요, 목록에서 요소를 제거하면 arrayList의 용량이 변경되지 않습니다. 그러나 당신은 trimToSize을 사용하여 스스로 할 수 있습니다.
일반적으로 더 많은 요소를 추가 할 때 용량이 증가함에 따라 용량에 대해 걱정할 필요가 없습니다. 용량에 대해 걱정할 수있는 이유는 빈번한 재 할당으로 인한 성능입니다. 그렇지 않으면 용량을 다시 초기화하는 것에 대해 걱정할 필요가 없습니다.
1
Capacity of ArrayList의 도움으로 용량이 재설정되지 않을 수 있습니다. 샘플 코드 찾기 :
import java.lang.reflect.Field;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
try {
ArrayList<Object> al = new ArrayList<Object>(500);
System.out.println(getCapacity(al));
for (int i = 0; i < 550; i++) {
al.add(new Object());
}
System.out.println(getCapacity(al));
al.clear();
System.out.println(getCapacity(al));
} catch (Exception ex) {
ex.printStackTrace();
}
}
static int getCapacity(ArrayList<?> l) throws Exception {
Field dataField = ArrayList.class.getDeclaredField("elementData");
dataField.setAccessible(true);
return ((Object[]) dataField.get(l)).length;
}
}
관련 문제
- 1. git에서 지사를 지우면 지워지겠습니까?
- 2. CLOB에 이스케이프 시퀀스가 보존됩니까?
- 3. ActiveMQ에서 주문은 어떻게 보존됩니까?
- 4. 용량이 NSMutableDictionary 인 경우
- 5. 생성시 용량이 있습니까?
- 6. ScriptReference 순서는 항상 런타임에 보존됩니까?
- 7. ArrayList를
- 8. ArrayList를
- 9. ArrayList 10의 기본 용량이 왜입니까?
- 10. Xtra 보고서 데이터 용량이 큰
- 11. JDO 객체를 분리 한 다음 해당 객체의 arraylist를 가져옵니다.
- 12. 회신 후 사용자 지정 메일 헤더가 보존됩니까?
- 13. 어떻게 작업을 다시 시작하면 복잡한 개체가 보존됩니까?
- 14. tfs에서 파괴를 수행 할 때 내역이 보존됩니까?
- 15. 경고를 비활성화하는 방법 : null 문자는 리터럴에 보존됩니까?
- 16. ArrayList를 []는
- 17. 는 ArrayList를
- 18. 봄 : ArrayList를
- 19. 는 ArrayList를
- 20. ArrayList를 안드로이드
- 21. ArrayList를 검사
- 22. LinearLayout 내부의 TableLayout을 지우면 TextView 헤더가 제거됩니다.
- 23. gen_server 모듈의 프로세스 사전을 지우면 어떻게됩니까?
- 24. C# DataGridview에서 열을 지우면 행이 모두 제거됩니까?
- 25. 사용자가 알림 센터에서 알림을 지우면 감지합니다.
- 26. Firefox : 텍스트 상자 값을 지우면 초점이 끊깁니다.
- 27. 사용자가 android에서 RAM을 지우면 서비스를 자동으로 시작합니다.
- 28. 로드가 많고 용량이 제한되는 Sharepoint 성능
- 29. (HTML 5) 로컬 저장소 용량이 너무 큽니까?
- 30. Android 앱 데이터 저장 용량이 계속 증가합니다.