2016-08-03 5 views
1

고정 크기의 ArrayList를 초기화 할 수 있습니까? 그러면 그 이상 증가하지 않고 모든 초기 점유율을 0으로 시작할 수 있습니까? 실제로 실제 배열에서 일반적인 배열처럼 동작하도록 강제하므로 배열 크기만큼 add() 개까지 사용할 수 있습니다.최대 크기의 ArrayList를 초기화하십시오.

+2

아니요. 이것은 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 같습니다 : 달성하려는 것은 무엇입니까? 어쩌면 제한된 대기열이 더 적합할까요? – assylias

+0

왜 정상 배열 자체를 사용하지 않습니까? 정확한 동기는 무엇입니까? –

+0

예를 들어 LinkedList와 같은 다른 arraylist 구현을 시도하십시오. – mattymanme

답변

1

당신은

List<Integer> list = Arrays.asList(new Integer[desiredLength]); 

이 모든 요소가 null으로 초기화되는 고정 된 크기 List<Integer>을 생산하기 위해 사용할 수 있습니다. 그런 다음 list.set(index,value)을 사용하여 List의 요소를 수정할 수 있습니다. add을 사용할 수 없습니다. addListsize을 변경하므로 고정 크기 목록에는 허용되지 않습니다. 당신이 null이 아닌 값으로 목록을 초기화 할 경우

, 당신은 같은 것을 할 수 있습니다

Integer[] arr = new Integer[desiredLength]; 
Arrays.fill(arr,0); 
List<Integer> list = Arrays.asList(arr); 
+0

아마 가장 좋은 방법인데, 실제 ArrayList를 생성하지는 않습니다. –

+0

@DiegoMartinoia 실제 ArrayList (즉, java.util.ArrayList)는 OP가 요청한대로 고정 크기를 가지고 있지 않습니다. – Eran

+0

그래, 내가 아는 :) 나는 방금 AL에 할당하려고 시도했을 때 그것을 언급할만한 가치가 있다고 생각하고 오류 –

4

이유와 기본적으로 간단하게 배열되어 정상 array 오히려

ArrayList보다는 ArrayList를 사용하지 우리가 더 많은 항목을 추가해야하는 상황에 대한 지원. 우리는 단지 기존의 배열처럼보다 그의 ArrayList의 크기를 변경하지 않는 경우

+0

에 의아해한다. 나는 그것을 사용하고 싶지만 나는 5 개의 크기로 모든 arraylist를 초기화하려고한다. 처음에는 0이됩니다. 다시 시작하고 어떤 조건에 따라 시작에서 1을 할당하십시오. 결국 5 개의 elemnts 1이 모두있는 경우, 테스트가 성공적이라는 것을 의미합니다. 그렇지 않으면 단일 0이 있으면 false를 나타냅니다. –

+0

일반적인'array'를 사용할 때의 문제점은 무엇입니까? 크기 5의 배열을 초기화 할 수 있고 초기화하는 동안 모든 값은 0이 될 것이고, 그런 다음 작업을 계속할 수 있습니다. –

1

당신 만의 ArrayList를 사용하여 ArrayList의 최소 크기를 확인 할 수 있습니다

ArrayList<T> myArrayList = new ArrayList(); 
myArrayList.ensureCapacity(n); 

을하지만하지 않습니다 n보다 큰 크기의 고정 된 크기를 설정하면 n보다 더 많이 추가 할 수 있습니다.

다른 사람이 언급했듯이 다른 작업을하는 것이 좋습니다. 실제로 그것을 이루고 싶다면 자신 만의 컬렉션을 쓸 수 있습니다 :

public class MyArrayList<T> { 
    ArrayList<T> arrayList; 
    int size; 

    public MyArrayList(int size) { 
    this.size = size; 
    arrayList = new ArrayList<>(); 
    arrayList.ensureCapacity(size); 
    } 

    public void add(T x) { 
    if (arrayList.size() >= size) { 
     throw new IllegalStateException(); 
    } 
    arrayList.add(x); 
    } 

    //remove, etc.. . You can even extend/implement arrayList/list if you want to do polymorphism. 
} 
관련 문제