[java] Java의 가변 길이 (동적) 배열

프로그램 실행을 통해 크기와 값이 변경되도록 정수 배열을 초기화하는 방법에 대해 궁금합니다. 제안 사항이 있습니까?



답변

예 : ArrayList를 사용 합니다.

Java에서 “일반”배열은 고정 크기입니다. 크기를 지정해야하며 확장하거나 축소 할 수 없습니다. 크기를 변경하려면 새 어레이를 만들고 원하는 데이터를 복사해야합니다. 이는 비효율적이고 고통 스럽습니다.

다행히도 일반적인 데이터 구조를 구현하는 모든 종류의 내장 클래스와 기타 유용한 도구도 있습니다. 전체 목록을 보려면 Java 6 API 를 확인 해야합니다.

한 가지주의 사항 : ArrayList는 기본 요소 (예 : 정수)가 아닌 개체 (예 : 정수) 만 포함 할 수 있습니다. 대부분의 경우 autoboxing / autounboxing은이 문제를 자동으로 처리하지만 수행중인 작업에 따라 이상한 동작이 발생할 수 있습니다.


답변

Java의 배열은 고정 된 크기입니다. 필요한 것은 Java에서 사용할 수있는 매우 중요한 컬렉션 중 하나 인 ArrayList입니다.

대신에

Integer[] ints = new Integer[x]

너는 사용한다

List<Integer> ints = new ArrayList<Integer>();

그런 다음 사용 목록을 변경 ints.add(y)하고 ints.remove(z)다른 많은 편리한 방법 사이에 적절한 Javadoc과에서 찾을 수 있습니다.

Java에서 사용할 수있는 Collections 클래스는 매우 강력하고 Java 초보자가 불필요하게 다시 작성하려고하는 많은 내장 기능을 제공하므로 공부하는 것이 좋습니다.


답변

배열은 인스턴스화되면 고정 크기입니다. 대신 목록을 사용할 수 있습니다.

Autoboxing은 List를 배열과 유사하게 사용 가능하게 만들고, 단순히 int- 값을 넣을 수 있습니다 :

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);


답변

나는 이전의 대답이 제안에 동의 ArrayList하기 때문에, ArrayList입니다 하지 동적 배열 있지만 목록은 배열에 근거. 차이점은 다음을 수행 할 수 없다는 것입니다.

ArrayList list = new ArrayList(4);
list.put(3,"Test");

지원 배열이 그러한 추가를 허용하더라도 아직이 위치에 요소가 없기 때문에 IndexOutOfBoundsException을 제공합니다. 따라서 @ randy-lance가 제안한대로 확장 가능한 사용자 지정 배열 구현을 사용해야합니다.


답변

Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below

public class DynamicArray {
 static   int []increaseSizeOfArray(int []arr){
          int []brr=new int[(arr.length*2)];
          for (int i = 0; i < arr.length; i++) {
         brr[i]=arr[i];
          }
          return brr;
     }
public static void main(String[] args) {
     int []arr=new int[5];
      for (int i = 0; i < 11; i++) {
          if (i<arr.length) {
              arr[i]=i+100;
          }
          else {
              arr=increaseSizeOfArray(arr);
              arr[i]=i+100;
          }
     }

for (int i = 0; i < arr.length; i++) {
     System.out.println("arr="+arr[i]);
}
}

}

출처 : 동적 배열을 만드는 방법


답변

  1. 소규모 크기를 처리하려면 List를 사용하는 것이 좋습니다.

  2. 숫자가 너무 많으면 목록과 오토 박싱을 사용하지 마십시오 .

    List <Integer> 목록

모든 단일 정수에 대해 새로운 정수가 자동으로 생성됩니다. 목록의 크기가 커지면 속도가 느려집니다. 이러한 정수는 불필요한 개체입니다. 이 경우 예상 크기를 사용하는 것이 더 좋을 것입니다.

int[] array = new int[ESTIMATED_SIZE];


답변

List대신 사용하는 것은 어떻습니까? 예를 들면ArrayList<integer>