ArrayList의 초기 크기
다음을 수행하여 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));
어레이 목록에 10배 0인 라인이 복사됨
용량ArrayList
크기와 같지 않다.크기는 에 포함된 요소의 수와 동일함ArrayList
(그리고 다른 것들도)List
구현).
용량은 기본 배열의 길이일 뿐이며, 이 길이는 요소들을 내부 저장하기 위해 사용된다.ArrayList
, 그리고 항상 목록의 크기와 같거나 더 크다.
전화할 때set(index, element)
리스트에 있는index
이 있다의 수(=크기) 관련됨(에 따라 0).AIOOBE
), 배열 이(=용량)가 배열 이(=용량) 가 아(특정) 아(특정) 아(특정)).ArrayList
).
그set
방법은 누구에게나 공통적이다.List
다음과 같은 구현LinkedList
에 의해 실제로 구현되는 것이 아니라, 항목들의 연결된 체인으로 구현된다.
편집: 실제 사용 시add(index, element)
방법이 아닌 방법set(index, element)
, 그러나 원리는 여기서 같다.
색인을 사용하여 요소를 추가하려면 배열을 사용하십시오.
String [] test = new String[length];
test[0] = "add";
10은 AL의 초기 용량이지 크기(0)가 아니다.요소가 많을 때는 초기 용량을 높은 값으로 언급해야 한다. 요소를 계속 추가할 때 용량을 확장해야 하는 오버헤드가 발생하지 않기 때문이다.
당신의 질문에 대한 정확한 대답은 다음과 같다.
ArrayList에서 내부 크기를 설정하면 내부 메모리 재할당이 발생해야 하는 nr. 시간을 줄일 수 있다.그 목록은 배열로 뒷받침된다.초기 용량(예: 초기 용량 0)을 지정할 경우 이미 요소의 첫 번째 삽입 시 내부 배열의 크기를 조정해야 한다.목록이 얼마나 많은 요소를 포함할 것인지 대략적으로 알고 있는 경우, 초기 용량을 설정하면 목록을 사용하는 동안 발생하는 메모리 재할당의 nr.가 감소할 것이다.
이게 누군가에게 도움이 될 수 있다.
ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
이것에 늦었지만, Java 8 이후, 나는 개인적으로 다음과 같은 접근법을 발견했다.Stream
API는 보다 간결하고 수용된 답변의 대안이 될 수 있다.
예를 들어,
Arrays.stream(new int[size]).boxed().collect(Collectors.toList())
에, 어디에size
원하는 것이다List
크기 및 여기에 언급된 단점 없이, 모든 요소List
로 초기화되다.0
.
(빠른 수색을 하고는 보지 못했다.stream
게시된 모든 답변에서 - 이 답변이 중복되는지 여부를 자유롭게 알려주면 해당 답변을 제거할 수 있음)
현재 목록에 요소가 없으므로 목록의 색인 5에 추가할 수 없음.목록의 용량과 현재 크기를 혼동하고 있는 경우.
그냥 전화:
arr.add(10)
ArrayList에 정수 추가
나도 비슷한 문제에 직면했고, 어레이리스트가 목록 인터페이스의 크기 조정 가능한 어레이 구현이라는 것만 알고 있다면, 어느 지점에라도 요소를 추가할 수 있지만, 적어도 초기 크기를 정의할 수 있는 옵션이 있을 것으로 예상한다.어쨌든 먼저 배열을 생성하고 다음과 같은 목록으로 변환할 수 있다.
int index = 5;
int size = 10;
Integer[] array = new Integer[size];
array[index] = value;
...
List<Integer> list = Arrays.asList(array);
또는
List<Integer> list = Arrays.asList(new Integer[size]);
list.set(index, value);
당신의 어레이리스트의 용량은 10이지만, 실제 목록에는 여기에 요소가 없다.추가 방법은 실제 리스트에 요소를 삽입하는 데 사용된다.요소가 없기 때문에 5의 인덱스에 요소를 삽입할 수 없다.
10개의 항목을 추가하려는 경우ArrayList
다음을 시도해 보십시오.
for (int i = 0; i < 10; i++)
arr.add(i);
배열 크기 변수를 이미 선언한 경우 변수를 사용하십시오.size
숫자 '10' 대신에
ArrayList myList = 새 ArrayList(10);
// myList.add(3, "DDD");
// myList.add(9, "III");
myList.add(0, "AAA");
myList.add(1, "BBB");
for(String item:myList){
System.out.println("inside list : "+item);
}
/*배열 리스트의 초기 capasity를 선언하는 것은 내부적으로 이동 시간을 절약하는 것에 지나지 않는다. 내부적으로 요소를 추가하면 capasity를 증가시키기 위해 capasity를 점검할 때, 처음에는 0 지수에서 요소를 추가하면 1 등이다.*/
에 대한 나의 의견.Stream
. 사용하는 것이 좋다고 생각한다.
IntStream.generate(i -> MyClass.contruct())
.limit(INT_SIZE)
.collect(Collectors.toList());
어떤 초기 가치도 유연하게 적용할 수 있다.
기여..
List <Destination\> destinations = Collections.nCopies(source.size(), Destination.class.newInstance());
이것은 배열의 인덱스가 0에서 시작하는 것을 잊어버리는 것에 대한 일반적인 오류다.용량이 10인 어레이 목록을 생성하셨습니다.첫 번째 요소는 위치 0: arr.get(0) 두 번째 요소는 위치 1: arr.get(1) ...10번째 원소는 9: arr.get(9)에 있다.
11번째 요소가 들어갈 위치 10에 값을 추가하려고 하는 경우(공간이 할당되는 경우)
그래서.. "할당한 공간에 접근할 수 없다면 초기 크기를 설정하는 것이 무슨 소용이 있겠어?"라는 질문에 답하고, 이 예시를 들어, 기술적으로 11번째 요소의 위치인 위치 10에 요소를 배치하려면 필요한 공간을 할당하지 않은 것이 분명하다.다시 한 번 말하지만, 인덱싱은 0으로 시작하고 10의 용량을 가진 배열에서 9로 끝난다!
참조URL: https://stackoverflow.com/questions/8896758/initial-size-for-the-arraylist
'programing' 카테고리의 다른 글
Vuex 저장소에 올바르게 추가할 수 없음 (0) | 2022.04.19 |
---|---|
vue js로 div graggable을 만드는 방법? (0) | 2022.04.19 |
내보내는 모듈에는 이 항목의 컨텍스트가 제공되지 않음 (0) | 2022.04.19 |
"strict: true"가 포함된 Vuex 스토어가 작동하지 않음 (0) | 2022.04.19 |
빈 Vuex Store 상태를 포착하지만 초기화할 때 계산된 속성이 이에 반응하도록 하는 방법 (0) | 2022.04.19 |