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

时间:2012-04-27 11:51:17

标签: 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);

            }
        }   
    }
}

//使用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);

            }
        }

    }
}

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

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:7)

而不是

primeNumbers.add(j, false);

你应该使用

primeNumbers.set(j, false);

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

答案 1 :(得分:4)

primeNumbers.add(j, false);

将元素添加到数组列表中,并将索引&gt; = j的所有元素向右移动[包括前一个元素j],同时:< / p>

primeNumbers[j]= false

会覆盖现有元素 j,并且不会移动元素。

您可能正在寻找ArrayList.set()而不是ArrayList.add()

答案 2 :(得分:0)

数组 ArrayList 的区别如下:

  1. 数组的实现是简单的固定大小的数组,但ArrayList的实现是动态大小的数组。
  2. Array可以包含基元和对象,但ArrayList只能包含对象元素
  3. 您不能将泛型与数组一起使用,但ArrayList允许我们使用泛型来确保类型安全。
  4. 您可以使用 length 变量来计算数组的长度,但 size()方法可以计算ArrayList的大小。
  5. 数组使用赋值运算符来存储元素,但ArrayList使用 add()来插入元素。