사전 크기 조정 arraylist
작업을 수행하지 않는 것 같습니다 .
// presizing
ArrayList<Integer> list = new ArrayList<Integer>(60);
나중에 액세스하려고하면 :
list.get(5)
0을 반환하는 대신 길이가 0 인 경우 IndexOutOfBoundsException : Index 5가 범위를 벗어납니다 .
모든 요소를 C ++과 같은 크기로 0으로 초기화하는 방법이 있습니까?
답변
생성자에 전달 된 정수는 초기 용량 , 즉 내부 배열의 크기를 조정하기 전에 보유 할 수있는 요소 수를 나타냅니다 (목록의 초기 요소 수와는 아무 상관이 없음).
60 개의 0으로 목록을 초기화하려면 다음을 수행하십시오.
List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, 0));
60 개의 서로 다른 객체 로 목록을 만들려면 Supplier
다음과 같이 Stream API를 사용할 수 있습니다 .
List<Person> persons = Stream.generate(Person::new)
.limit(60)
.collect(Collectors.toList());
답변
// apparently this is broken. Whoops for me!
java.util.Collections.fill(list,new Integer(0));
// this is better
Integer[] data = new Integer[60];
Arrays.fill(data,new Integer(0));
List<Integer> list = Arrays.asList(data);
답변
60 대는 내부 스토리지의 초기 용량입니다. 그것이 얼마나 클지에 대한 힌트이지만, 물론 이것으로 제한되지는 않습니다. 값을 사전 설정해야하는 경우 다음과 같이 직접 설정해야합니다.
for (int i = 0; i < 60; i++) {
list.add(0);
}
답변
Java 8 구현 (목록은 60
0으로 초기화 됨 ) :
List<Integer> list = IntStream.of(new int[60])
.boxed()
.collect(Collectors.toList());
new int[N]
-0과 길이 N으로 채워진 배열을 만듭니다.boxed()
-정수로 박스 화 된 각 요소collect(Collectors.toList())
-스트림 요소를 수집
답변
그렇지 않습니다. ArrayList는 배열을 내부 respentation으로 사용합니다. 60 개 이상의 요소를 추가하면 밑줄 배열이 확장됩니다. 얼마나 많은 RAM을이 배열에 추가 할 수 있습니까?