2012-04-27 66 views
6

tôi đã giải quyết vấn đề về các số nguyên tố, tôi tìm thấy giải pháp bằng cách sử dụng mảng, nhưng tôi muốn sử dụng danh sách mảng cho một số vấn đề, một trong số họ là để hiểu rõ Arraylist. nhưng tôi thấy rằng kết quả không giống nhau khi tôi sử dụng ArrayList, sau đây là 2 Codes:sự khác nhau giữa Array và ArrayList để nhận số Prime là gì?

// sử dụng Mảng

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); 

      } 
     } 
    } 
} 

// Sử dụng 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); 

      } 
     } 

    } 
} 

thể i biết những gì là sai tôi đã làm với việc sử dụng Arraylist, và nếu tôi muốn sử dụng arraylist cho cùng một kết quả những gì tôi nên làm.

Xin cảm ơn sự giúp đỡ.

+1

Bạn không cần 'nhập java.util.Arrays;' –

Trả lời

7

Thay vì

primeNumbers.add(j, false); 

bạn nên sử dụng

primeNumbers.set(j, false); 

từ add() thêm một yếu tố mới ở vị trí quy định (có nghĩa là ArrayList phát triển bởi một phần tử), nhưng set() chỉ đặt giá trị của phần tử tại spec vị trí ified.

+1

Cảm ơn tuyệt vời, giải pháp thực sự nhanh chóng và đơn giản. –

4
primeNumbers.add(j, false); 

thêm các yếu tố vào danh sách mảng, và thay đổi tất cả các yếu tố với index> = j bên phải [bao gồm các yếu tố trước j], trong khi:

primeNumbers[j]= false 

đè hiện phần tửj và không thay đổi các phần tử.

Bạn có thể tìm cho ArrayList.set() thay vì ArrayList.add()

0

Sự khác nhau giữa MảngArrayList đang theo dõi:

  1. Thực hiện các mảng rất đơn giản mảng có kích thước cố định nhưng thực hiện ArrayList là mảng có kích thước động.
  2. Mảng có thể chứa cả nguyên thủy và đối tượng nhưng ArrayList chỉ có thể chứa các phần tử đối tượng
  3. Bạn không thể sử dụng Generics cùng với mảng nhưng ArrayList cho phép chúng tôi sử dụng Generics để đảm bảo an toàn kiểu.
  4. Bạn có thể sử dụng biến số chiều dài để tính độ dài của mảng nhưng kích thước() phương pháp để tính kích thước của ArrayList.
  5. Toán tử gán phép sử dụng mảng để lưu trữ các phần tử nhưng ArrayList sử dụng thêm() để chèn phần tử.
Các vấn đề liên quan