어떻게하면 Java에서 모두 0으로 ArrayList를 초기화 할 수 있습니까?



java arraylist 배열 초기화 (4)

// 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);

arraylist 가 presizing을 위해 그 일을하지 않고있는 것처럼 보입니다 :

// presizing 

ArrayList<Integer>() list = new ArrayList<Integer>(60);

이후에 액세스하려고하면 :

list.get(5) 

그것은 0 대신 null을 보여줍니다. C ++과 같은 정확한 크기의 모든 요소를 ​​0으로 초기화하는 방법이 있습니까?


전달중인 60은 내부 저장 용량의 초기 용량입니다. 얼마나 큰지에 대한 힌트 일 뿐이지 만 물론 그것에 국한되지는 않습니다. 값을 미리 설정해야하는 경우 직접 설정해야합니다 (예 :

for (int i = 0; i < 60; i++) {
    list.add(0);
}

그것은 그렇게되지 않습니다. ArrayList는 내부 respentation으로 배열을 사용합니다. 60 개 이상의 요소를 추가하면 밑받침 배열이 무효화됩니다. 얼마나 많은 RAM을 가진 배열만큼 많은 요소를 추가 할 수 있습니까?


생성자에 전달 된 정수는 초기 용량 , 즉 내부 배열의 크기를 조정해야하기 전에 보유 할 수있는 요소의 수를 나타냅니다 (목록의 초기 요소 수와는 아무런 관련이 없음).

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());




collections