【发布时间】:2014-08-29 19:26:39
【问题描述】:
我正在制作一些用于查找某个数的质因数的方法。这被分解为两个都使用数组的函数。但是,在这两个函数中,代码的效率都非常低。首先我必须计算数组的长度,创建一个该长度的新数组,然后使用几乎完全相同的代码来填充数组。
有没有一种方法可以使数组的宽度未知,并在找到整数时将它们推到数组的末尾?
这是我的代码:
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 -
请解释谁阻止使用会根据需要增长的 ArrayList?
-
需要注意的是,一个ArrayList默认是由一个大容量数组支持的,但是当它的容量超出时,它需要创建一个新数组并执行一个副本,就像他手动做的那样这里。没有办法解决这个问题,因为数组在内存中是连续的。其他不受数组支持的集合类型不会受到此影响。
标签: java arrays performance repeat