2013-01-19 5 views
4

정수 데이터 유형이 지원하는 길이보다 긴 java 배열을 얻을 수있는 방법이 있습니까?자바의 임의의 배열 길이

Java에서 큰 정수를 사용하여 인덱싱 할 수있는 무언가를 찾고 있습니다. 기본적으로 지원되는 배열 길이가 구현할 알고리즘에 필요한만큼 커지지 않았기 때문입니다.

+3

배열과 함께이 알고리즘을 구현하지 않아도 될 수 있습니까? 알고리즘에 대해 조금 알려주시겠습니까? Btw, 당신은 언제나 색인 된 긴 클래스를 구현할 수 있지만 알고리즘 구현을 다시 생각하는 것이 더 나을 것이라고 생각합니다. –

+0

가능하면 더 빠르기 때문에 배열이 필요합니다. 배열은 원시 길이의 배열을 사용하는 새로운 프라임 시브 (prime sieve) 알고리즘입니다. 즉 처음 두 번 실행 한 후 길이가 9699690보다 커야합니다. – Adam

+0

체에서 소수를 얼마나 많이 생성하려고합니까? 일반적으로 65,000이나 그 중 몇 가지만을 사용하고 그 이상의 소수는 아마 소수 테스트를 사용하지 않겠습니까? 배열은 어떻게 사용됩니까? "getNearestPrime (N)"과 같은 작업을 수행 할 경우이 메서드를 구현하면 mod 연산을 통해 솔루션의 배열을 찾을 수 있습니다. 이렇게하면 여러 배열을 사용할 수 있습니다. –

답변

4

와 예를 들어이 라이브러리는 당신을 위해 유용합니다 http://fastutil.dsi.unimi.it/

그것은 말한다 :

"... 또한 큰 (64 제공 비트 배열) ... "

2

알고리즘을 변경할 필요가 없습니까? Integer.MAX2^31-1과 같으며 2147483647이며 각각 int은 4 바이트를 갖습니다. 8589934588 바이트의 메모리 (8GB !!!).

+1

좋은 지적; 리스트를 위해서가 아니라, 그것을 생성하는 함수를 테스트하기 위해 수백만 소수의 배열을 생성하려고합니다. 나는 int가 그것을 다루지 않을 것이라고 다른 곳에서 읽었지만 아마 그렇게 할 것입니다. – Adam

+1

그러나 "임의의 길이"로 대답하지는 않기 때문에이 문제를 직접 해결하는 대답을 선택해야합니다. 투표했지만. – Adam

3

Int32는 8 기가 바이트의 저장 공간을 제공합니다. 너는 많은 기억을 가지고 있니?

해시로 색인 배열 요소를 사용해야한다고 생각합니다. 단지 HashMap<BigInteger,YourValueType> 또는 일부 BigMemory 같은 libs와 대안 http://terracotta.org/products/bigmemory