programing

ArrayList의 초기 크기

prostudy 2022. 4. 19. 19:05
반응형

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 이후, 나는 개인적으로 다음과 같은 접근법을 발견했다.StreamAPI는 보다 간결하고 수용된 답변의 대안이 될 수 있다.

예를 들어,

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

반응형