-
java ArrayList의 동작JAVA/in 기초 2024. 7. 22. 17:31728x90
테스트용 코드 전체
import java.lang.reflect.Field fun main() { // val list = MutableList<String?>(1000) { null } // 초기 크기 설정 val list = mutableListOf<Int>() println("list size : ${list.size} / list capacity:: ${getCapacity(list)}") // # 1 초기 생성 for ( i in 0..25) { list.add(i+1) println("list size : ${list.size} / list capacity:: ${getCapacity(list)}") // # 2 출력 } } // arraylist의 capacity 출력 fun getCapacity(arrayList: List<*>?): Int { if (arrayList == null) { return 0 } val field: Field = ArrayList::class.java.getDeclaredField("elementData") field.isAccessible = true return (field.get(arrayList) as Array<*>).size }
결과 값
list size : 0 / list capacity:: 0 // #1 list size : 1 / list capacity:: 10 // capacity 변화 list size : 2 / list capacity:: 10 list size : 3 / list capacity:: 10 list size : 4 / list capacity:: 10 list size : 5 / list capacity:: 10 list size : 6 / list capacity:: 10 list size : 7 / list capacity:: 10 list size : 8 / list capacity:: 10 list size : 9 / list capacity:: 10 list size : 10 / list capacity:: 10 list size : 11 / list capacity:: 15 // capacity 변화 list size : 12 / list capacity:: 15 list size : 13 / list capacity:: 15 list size : 14 / list capacity:: 15 list size : 15 / list capacity:: 15 list size : 16 / list capacity:: 22 // capacity 변화 list size : 17 / list capacity:: 22 list size : 18 / list capacity:: 22 list size : 19 / list capacity:: 22 list size : 20 / list capacity:: 22 list size : 21 / list capacity:: 22 list size : 22 / list capacity:: 22 list size : 23 / list capacity:: 33 // capacity 변화 list size : 24 / list capacity:: 33 list size : 25 / list capacity:: 33 list size : 26 / list capacity:: 33
설명
ArrayList는 List 인터페이스를 구현한 동적 배열입니다. 내부적으로는 배열을 사용하여 요소를 저장하며, 필요에 따라 크기를 조절할 수 있습니다.
- 최초에 리스트를 생성하면, 크기와 용량 모두 0입니다.
- 요소를 추가할 때마다 용량이 증가합니다. 용량이 모두 차면 새로운 배열을 생성하고 기존 데이터를 복사합니다.
동작 예시
- 최초 list를 생성하고, size와 capacity를 확인하면 0 / 0
- list에 처음 데이터를 add 할 경우, size / capacity 는 1 / 10
- list에 2번째 데이터를 add
- list에 10번째 데이터를 add
- list에 11번째 데이터를 add 하면 새로운 배열을 생성하고, 기존 데이터를 아래와 같이 복사
참고 자료
728x90'JAVA > in 기초' 카테고리의 다른 글
[TIP] JAVA CODE STYLE GUIDE (0) 2016.08.11 [JAVA]Labmda 맛보기 (0) 2016.07.20 [Topic]왜 1000 == 1000 은 False이고, 100 == 100 은 True 일까? (0) 2015.11.25 [번역]Map/Collection 선택 가이드 (0) 2015.07.20 [JAVA]LINUX 터미널에서 클래스 파일 실행 하기 (0) 2015.05.13