2012-04-27 115 views
6

我正在解決關於素數的問題,我發現使用數組的解決方案,但是我想用數組列表來解決一些問題,其中之一就是很好地理解Arraylist。但我發現,結果是不一樣的,當我使用ArrayList中,這裏有2個代碼:Array和ArrayList之間有什麼區別來獲得素數?

//使用數組

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得到相同的結果,我應該怎麼做。

非常感謝您的幫助。

+1

你不需要'import java.util.Arrays;' – 2012-04-27 12:05:46

回答

7

代替

primeNumbers.add(j, false); 

你應該使用

primeNumbers.set(j, false); 

因爲add()在指定位置添加一個新元素(指的ArrayList增長一個元素),但set()只設置元素的值在spec ified的位置。

+1

非常感謝,真快又簡單的解決方案。 – 2012-04-27 11:59:34

4
primeNumbers.add(j, false); 

添加元素到陣列列表中,並用指數> = j換檔所有元素向右[包括先前元素j],而:

primeNumbers[j]= false 

覆蓋現有元素j,並且不移位元素。

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

0

差異與跟隨之間陣列的ArrayList:陣列的實施

  1. 是簡單的固定尺寸的陣列,但ArrayList中的實現是動態大小的數組。
  2. 數組可以同時包含基元和對象,但ArrayList只能包含對象元素
  3. 不能將泛型和數組一起使用,但ArrayList允許我們使用泛型來確保類型安全。
  4. 您可以使用長度變量來計算數組長度,但是大小()方法來計算ArrayList的大小。
  5. 數組使用賦值運算符來存儲元素,但ArrayList使用add()來插入元素。
相關問題