2017-12-10 4 views
0

배열 색인의 크기를 늘려야하는 클래스에 대한 할당이 있습니다. 이 지침에서는 이 아니며이 아닌 새로운 배열을 만들고 요소를 복사하여 비효율적이라고 말합니다. 대신에 다음을 제안합니다.Arraylist를 사용하지 않고 배열 인덱스 늘리기 또는 다른 배열로 요소 복사

"더 일반적인 전략은 배열의 초기 크기를 선택하고 요소가 꽉 찰 때까지 추가 한 다음 크기를 두 배로 늘린 다음 요소가 가득 찰 때까지 계속 추가하는 것입니다."

내 머리를 감싸는 데 문제가 있습니다. 이 일을 어떻게 성취 할 수 있습니까?

+0

배열의 크기를 동적으로 늘리려는 경우 –

+0

은 무엇을 시도 했습니까? –

+0

특정 언어보다 더 구체적으로 배열하면 – Sunil

답변

0

당신은 다음과 같이 현재 배열의 lenght를 곱하면 배열의 크기를 두배로 할 수있다 :

array = Arrays.copyOf(array, array.lenght*2); 
+0

기존 어레이의 크기를 늘리지 않고 새로운 인스턴스를 생성합니다. –

0

초기 크기를 배열과 그 다음 두 번 가득 찰 때까지 요소를 추가 그것의 크기는 가득 차있을 때까지 성분을 추가하고, 이렇게 에 계속한다.

이이 문장은 분명히 자바 이 전략은 ArrayList를에 사용되는 ArrayList를을 사용하는 방법을 보여줍니다. 선언 방법입니다.

List<Your_DataType> lst=new ArrayList<>(); 

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

lst.add(1); 
lst.add(2); 
lst.add(3); 
lst.get(0);// shows 1 which is at 0th location 
lst.get(1);// shows 2 which is at 0th location 
lst.get(2);// shows 3 which is at 0th location 
0

당신은 새로운 배열을 작성해야하거나 같은 것을 할 수 있습니다 : 당신은 그냥 대형 배열로 정의 된 새로운 배열로 기존의 배열을 복사하는 위의 예에서

int a[] = new a[10]; 
a = Arrays.copyOf(a, a.length + arrayGrowNumber); 

합니다.

자세한 내용은이 link.

0

귀하의 지시가 충돌이다 확인할 수있다. "일반적인 전략"지침은 여전히 ​​"새로운 배열을 만들고 요소를 복사"하지만 그렇게 자주하는 것은 아닙니다.

크기 20으로 배열을 만든 다음 총 50 개의 값을 추가한다고 가정 해 보겠습니다.

처음 20 개를 추가 한 후에 크기 40의 새 배열을 만들고 값을 복사 한 다음 새 배열에 계속 추가합니다.

20 개를 더 추가하면 (총 40 개) 크기 80의 새 배열을 만들고 값을 복사 한 다음이 새 배열에 계속 추가합니다.

50 개 값을 모두 추가하면 배열의 크기가 80이고 처음 50 개 위치에 값이 있습니다. 배열을 두 번 복사했습니다.

을 만들 수 없습니다. 오해의 소지가 있거나 잘못된 것입니다. 너는해야만 해. "일반적인 전략"은 "두 배의 크기"를 요구합니다.

관련 문제