我正在製作一些用於查找某個數字的主要因素的方法。這被分解成兩個使用數組的函數。但是,在這兩個函數中,代碼效率非常低。首先,我必須計算數組的長度,創建一個新的數組長度,然後使用幾乎完全相同的代碼來填充數組。未知長度的Java /數組效率低下
有沒有一種方法,我可以使數組未知的寬度和推整數數組的末尾,因爲我發現他們?
這裏是我的代碼:
public class JavaApplication7{
public static void main(String[] args) {
System.out.println(Arrays.toString(primeFactors(85251)));
}
public static int[] primeFactors(int num){
int[] factors = primesUpTo(num);
int originalNum = num;
int i = 0;
int count = 0;
while(num != 1){
if(num % factors[i] == 0){
num /= factors[i];
i = 0;
count++;
}else{
i++;
}
}
int[] primeFactors = new int[count];
i = 0;
count = 0;
while(originalNum != 1){
if(originalNum % factors[i] == 0){
originalNum /= factors[i];
primeFactors[count] = factors[i];
i = 0;
count++;
}else{
i++;
}
}
return primeFactors;
}
public static int[] primesUpTo(int upTo){
int count = 0;
int num = 2;
while(num <= upTo){
boolean isPrime = true;
for(int div = 2; div <= num/2; div++){
isPrime = num % div == 0 ? false : isPrime;
}
count += isPrime ? 1 : 0;
num++;
}
int i = 0;
num = 2;
int[] primes = new int[count];
while(num <= upTo){
boolean isPrime = true;
for(int div = 2; div <= num/2; div++){
isPrime = num % div == 0 ? false : isPrime;
}
if(isPrime){
primes[i] = num;
i++;
}
num++;
}
return primes;
}
}
查找'ArrayList' – user1071777 2014-08-29 19:28:31
請解釋誰阻止使用ArrayList,它會根據需要增長? – h22 2014-08-29 19:39:22
應該注意的是,默認情況下ArrayList是由一個慷慨大小的數組支持的,但是當它的容量超過時,它需要創建一個新數組並執行一個副本,就像他在這裏手動執行的那樣。沒有辦法解決這個問題,因爲陣列在內存中是連續的。其他不受數組支持的集合類型不會受此影響。 – 2014-08-29 20:18:02