Array和ArrayList有什么区别来获得Prime数字?

Ahm*_*sar 6 java arrays arraylist

我正在解决关于素数的问题,我找到了使用数组的解决方案,但我想使用数组列表来解决一些问题,其中之一就是很好地理解Arraylist.但我发现当我使用arraylist时结果不一样,这里是2个代码:

//使用数组

import java.util.Arrays;
public class Prime {
    public static void main(String[] args) {
        primeNumber(100);
    }
    public static void primeNumber(int end) {
        boolean primeNumbers[] = new boolean[end]; 
        for (int i = 0; i < end; i++) {
            primeNumbers[i] = true;
        }
        for (int i = 2; i < primeNumbers.length; i++) {
            if (primeNumbers[i] ) {
                for (int j = i+i; j < primeNumbers.length; j += i) {
                    primeNumbers[j]= false;
                }
            }
        }
        for (int j = 2; j < primeNumbers.length; j++) {
            if (primeNumbers[j]) {
                System.out.println(j);

            }
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)

//使用ArrayList

import java.util.ArrayList;
public class Prime {
    public static void main(String[] args) {
        primeNumber(100);
    }

    public static void primeNumber(int end) {
        ArrayList<Boolean> primeNumbers = new ArrayList<Boolean>(); 
        for (int i = 0; i < end; i++) {
            primeNumbers.add(i,true);
        }
        for (int i = 2; i < primeNumbers.size(); i++) {
            if (primeNumbers.get(i) ) {
                for (int j = i+i; j < primeNumbers.size(); j += i) {
                    primeNumbers.add(j, false);
                }
            }
        }
        for (int j = 2; j < primeNumbers.size(); j++) {
            if (primeNumbers.get(j)) {
                System.out.println(j);

            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我可以知道我使用Arraylist时做了什么错误,如果我想使用arraylist获得相同的结果我应该怎么做.

非常感谢你的帮助.

Pet*_*ček 7

代替

primeNumbers.add(j, false);
Run Code Online (Sandbox Code Playgroud)

你应该使用

primeNumbers.set(j, false);
Run Code Online (Sandbox Code Playgroud)

因为add()在指定位置添加一个新元素(意味着ArrayList增长了一个元素),但set()只在给定位置设置元素的值.