2010-12-10 9 views
1

표준 배열을 사용하는 것과 같은 ArrayList (또는 다른 컬렉션)를 사용하고 싶습니다. 특히ArrayList의 시작 크기

, 나는 그것이 intial 크기 (예를 들어, SIZE)로 시작하고 바로 박쥐 명시 적 요소를 설정 할 수

예를 들어, 원하는

array[4] = "stuff"; 

는 그러나

array.set(4, "stuff"); 

을 작성할 수 있습니다, 다음 코드는 IndexOutOfBoundsException이 발생합니다 :이 작업을 수행하는 몇 가지 방법이 알고

ArrayList<Object> array = new ArrayList<Object>(SIZE); 
array.set(4, "stuff"); //wah wahhh 

을,하지만 난 궁금했다 사람들이 좋아하는 것이 있거나 사용하기에 더 좋은 컬렉션이었을 것입니다. 현재, 나는 다음과 같은 코드를 사용하고 있습니다 : 나는 잠재적 번 (수만)의 무리를 실행할 수 루프에서이 일을하고 있기 때문에 질문을하기도

ArrayList<Object> array = new ArrayList<Object>(SIZE); 

for(int i = 0; i < SIZE; i++) { 
    array.add(null); 
} 

array.set(4, "stuff"); //hooray... 

유일한 이유입니다. ArrayList 크기 조절 비헤이비어가 "지정되지 않았습니다."라고 가정하면 크기를 조정하거나 배열을 백업하는 여분의 미사용 부분에 메모리를 낭비하지 않아도됩니다. 배열 (array의 거의 모든 셀)을 array.set()에 대한 호출로 채울 것이므로 은 결코의 용량을 초과하지 않을 것이기 때문에 이것은 논점이 될 수 있습니다.

차라리 일반 배열을 사용하고 싶지만 내 사양에서는 Collection을 사용해야합니다.

답변

7

초기 용량은 어레이의 크기를 의미합니다. 거기에 요소가 있음을 의미하지는 않습니다. 그래서 크기! = 용량.

사실 은 배열을 사용하고 Arrays.asList(array)을 사용하여 컬렉션을 가져옵니다.

+0

알아두기 : 용량 : Arrays.asList()를 사용하는 것에 관해서는 생각해 봤지만, 그때마다 (필자는 라이브러리) 매번 배열 전체를 반복해야한다. 나는 이것이 모든 null을 추가하기 위해 SIZE 시간을 반복하는 것보다 나쁘지 않다고 생각한다. – biggusjimmus

+2

은 선형 복잡성에 대해 그렇게 걱정하지 않아도됩니다. – Bozho

+0

당신이 옳을 수도 있습니다. 나는 거의 picayune 화제이기 때문에, 이것을 게시하는 것을 거의 걱정하지 않았다. 내 구현 괜찮아요, 그냥 보인다 ... 잘못. – biggusjimmus

3

내가는 HashMap을

 

HashMap hash = new HasMap(); 
hash.put(4,"Hi"); 
 
+0

배열에서 낭비되는 공간이 거의 없다는 것을 거의 보장합니다. – biggusjimmus

+0

예, 더 많은 메모리를 낭비하지만 arraylist처럼 다시 정렬 할 시간을 낭비하지 않아도됩니다. – Seva

+0

또한 HashMaps는 컬렉션이 아닙니다. – biggusjimmus

0

예, 해시 맵이 될 좋은 ideia을 권 해드립니다. 다른 방법으로, 당신은 단지 당신을위한 큰 용량의 어레이를 시작할 수 있습니다.

1

주요 포인트가 메모리임을 고려하십시오. 그런 다음 Java arraylist가 수동으로 수행 할 수 있지만 원하는만큼 크기를 조정할 수는 없습니다.

 
1) Create a vector. 
2) If the vector is full, create a vector with the old vector size + as much you want. 
3) Copy all items from the old vector to your new vector. 

This way, you will not waste memory. 

을 또는 당신은 (하지 벡터) 구조체 목록을 구현할 수 있습니다 그래서 당신은 다음을 수행 할 수 있습니다. Java에는 이미 하나가 있다고 생각합니다.

관련 문제