다음을 수행하여 ArrayList의 초기 크기를 설정할 수 있습니다
ArrayList<Integer> arr=new ArrayList<Integer>(10);
그러나 할 수 없습니다
arr.add(5, 10);
범위를 벗어난 예외가 발생하기 때문입니다.
할당 한 공간에 액세스 할 수없는 경우 초기 크기 설정은 무엇입니까?
추가 기능은 add(int index, Object element)
색인 10에 추가하지 않도록 정의됩니다 .
답변
배열 목록의 크기와 용량을 혼동하고 있습니다.
- 사이즈 리스트의 요소의 수이고;
- 용량 리스트는 잠재적으로 그 내부 구조를 재 할당없이 수용 할 수있는 요소 수이다.
를 호출 new ArrayList<Integer>(10)
하면 목록의 크기가 아니라 목록의 초기 용량을 설정하게됩니다 . 다시 말해서, 이런 식으로 구성되면, 배열리스트는 수명이 다 된 상태로 시작됩니다.
배열 목록에 10 개의 요소를 추가하는 한 가지 방법은 루프를 사용하는 것입니다.
for (int i = 0; i < 10; i++) {
arr.add(0);
}
이 작업을 수행하면 인덱스 0..9에서 요소를 수정할 수 있습니다.
답변
미리 정의 된 크기의 목록을 원하는 경우 다음을 사용할 수도 있습니다.
List<Integer> arr = Arrays.asList(new Integer[10]);
답변
Collections.fill (list, obj);를 사용하려면 반복되는 객체로 목록을 채우려면 대신 사용할 수 있습니다.
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
라인은 ArrayList에 10 번 0을 복사합니다.
답변
의 용량 은 sizeArrayList
와 다릅니다 . 크기 는 ArrayList
(및 다른 요소에 포함 된 요소 수와 같습니다.List
구현)에 .
용량 internaly의 요소를 저장하는데 사용되는 기본 어레이의 단 길이 ArrayList
, 항상 크거나 동일 사이즈 목록.
set(index, element)
목록을 호출 할 때 index
목록 요소의 실제 수 (= 크기)와 관련이 있습니다 (코드에서 0이므로AIOOBE
배열 길이 (= 용량) throw 됨)와 관련이 있습니다 (구현 세부 사항에 따라 다릅니다) ~로ArrayList
).
이 set
방법은와 List
같은 모든 구현에 공통적입니다 . 예를 들어 LinkedList
실제로 배열에 의해 구현되지 않고 연결된 항목 체인으로 사용됩니다.
편집 : 실제로이 add(index, element)
방법을 사용 set(index, element)
하지는 않지만 원칙은 동일합니다.
답변
index가있는 요소를 추가하려는 경우 대신 배열을 사용할 수 있습니다.
String [] test = new String[length];
test[0] = "add";
답변
10은 크기 (0)가 아니라 AL의 초기 용량입니다. 요소를 많이 추가 할 때는 초기 용량을 높은 값으로 언급해야합니다. 요소를 계속 추가 할 때 용량을 확장하는 오버 헤드가 발생하지 않기 때문입니다.
답변
귀하의 질문에 대한 정확한 답변은 다음과 같습니다.
ArrayList에서 초기 크기를 설정하면 nr이 줄어 듭니다. 내부 메모리 재 할당이 자주 발생합니다. 리스트는 배열에 의해 지원됩니다. 예를 들어, 요소를 처음 삽입 할 때 초기 용량 0을 지정하면 내부 배열의 크기를 조정해야합니다. 목록에 보유 할 요소의 수를 대략적으로 알고 있다면 초기 용량을 설정하면 nr이 줄어 듭니다. 목록을 사용하는 동안 발생하는 메모리 재 할당 수