2014-02-10 9 views
0

나는 정수를 취하여 위치에 따라 부울 배열에 저장하는 다음 코드를 가지고 있습니다. 나는 사용자가 배열에 더 많은 숫자를 입력 할 수 있도록하는 방법을 포함하고 있습니다. 그러나 그 수가 배열 크기보다 크면 크기를 늘려야합니다. 배열을 만들면 각 위치에있는 것을 바꿀 수 없다는 것을 알고 있습니다. 배열을 더 크게 만들 수있는 방법이 있습니까? 아니면 arraylists를 사용하여 배열 크기를 변경할 수 있습니까?Java 배열 크기를 늘리십시오.

public class ISet { 
    public int max; 
    boolean[] numArray; 


    ISet(int a) { 
     this.size = a; 
     this.numArray = new boolean[size]; 

    } 

    public void include(int n) { 
     if (n > size) { 
      this.size = n; 
      numArray[n]=true; 

     } 
     else 

      numArray[n]=true; 


     } 
+1

할당 된 메모리는 크기를 조정할 수 없습니다. 이것은 원하는 크기의 새로운 배열을 생성하고 원래 배열의 내용을 아마도'java.lang.System.arraycopy (...); '를 사용하여 새로 생성 된 배열에 복사해야한다. – Tiny

+0

어떤 목적으로? 인덱스 "숫자"에 "참"을 저장하는 대신 목록/세트/맵에 "숫자"를 저장하고 "숫자"가 참인 숫자가 목록에 포함되어 있으면 그렇지 않으면 거짓입니다. – Martin

+1

여기를보세요. http://docs.oracle.com/javase/tutorial/collections/ 어떤 컬렉션이 가장 적합한 지 확인하십시오. – Martin

답변

1

부울 (프리미티브 데이터 유형)과 반대로 ArrayList<Boolean>이어야하지만 간단히 ArrayList를 사용할 수 있습니다. 아마도 가장 쉬운 해결책 일 것입니다.

다른 옵션은 더 큰 새 배열을 만들고 현재 배열의 크기를 초과하면 현재 배열의 모든 요소를 ​​새 배열로 복사하는 것입니다.

1

ArrayList를 사용해야합니다.

일반 배열의 크기는 Java에서 고정되어 있습니다.

+0

나는 내가해야 할 수도 있다고 생각했다. 불리언 집합을 사용할 수 있습니까? 아니면 파이썬에서 나온 것입니까? – Softey

+0

고유 한 요소를 포함하는 것이 목적이므로 Java Set은 적합하지 않습니다. – OlivierLi

2

Arrays.copyOf(numArray, newLength) 큰 것을 만들고 싶다면 새 길이가 원본보다 길면 끝에 새끼를 추가하여 지정된 길이의 새 배열로 배열을 복사합니다.

그렇지 않으면 ArrayList를 사용할 수 있습니다.

0

"일반"코드의 경우 ArrayList을 대신 사용해야합니다.

극단적 인 거대한 배열을 사용하는 응용 프로그램의 경우 Object는 Primitive보다 4 배 (16 바이트) 많은 메모리가 필요하므로 ArrayList보다 훨씬 적은 메모리가 필요합니다.

이러한 특수한 상황에서는 내용을 새로운 더 큰 배열로 복사하는 Arrays.copyOf()을 사용할 수 있습니다. src cocde가 ArrayList.java

관련 문제