Я делаю несколько методов, которые используются для нахождения простых коэффициентов определенного числа. Это разбивается на две функции, которые используют как массивы. Однако в обеих функциях код очень неэффективен. Сначала я должен подсчитать длину массива, создать новый массив этой длины, а затем использовать почти тот же самый код для заполнения массива.Неэффективные 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
Пожалуйста, объясните, кто предотвращает использование ArrayList, который будет расти по мере необходимости? – h22
следует отметить, что массив ArrayList поддерживается массивом с большим размером по умолчанию, но когда его емкость превышена, ему нужно будет создать новый массив и выполнить копию, например, он делает здесь вручную. Нет никакого способа обойти это, потому что массивы смежны в памяти. Другие типы коллекций, которые не поддерживаются массивами, не пострадают от этого. –