2012-04-27 14 views
6

मैं प्राइम नंबरों के बारे में समस्या हल कर रहा था, मुझे Arrays का उपयोग करके समाधान मिला, लेकिन मैं कुछ मुद्दों के लिए सरणी सूची का उपयोग करना चाहता था, उनमें से एक 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); 

      } 
     } 

    } 
} 

का उपयोग करना पता है कि मैंने ऐरेलिस्ट का उपयोग करने में क्या गलत किया है, और यदि मैं उसी परिणाम के लिए सरणी सूची का उपयोग करना चाहता हूं तो मुझे क्या करना चाहिए।

सहायता के लिए बहुत धन्यवाद।

+1

आपको आयात java.util.Arrays की आवश्यकता नहीं है; ' –

उत्तर

7

के बजाय

primeNumbers.add(j, false); 

के लिए देख रहे हैं आप

primeNumbers.set(j, false); 

का उपयोग करना चाहिए के बाद से add() निर्दिष्ट स्थान पर एक नए तत्व कहते हैं एक तत्व द्वारा बढ़ता है), लेकिन set() केवल spec पर तत्व का मान सेट करता है ified स्थिति।

+1

ग्रेट धन्यवाद, वास्तव में तेज़ और सरल समाधान। –

4
primeNumbers.add(j, false); 

सरणी सूची तत्व जोड़ता है, और, [पिछले तत्व j सहित] सही करने के लिए सूचकांक> = j साथ सभी तत्वों के स्थानांतरण करते हुए:

primeNumbers[j]= false 

ओवरराइड करता है मौजूदा तत्वj, और तत्वों को स्थानांतरित नहीं करता है। (ArrayList अर्थ

आप शायद ArrayList.set() के लिए बजाय ArrayList.add()

0

अंतर अनुसरण कर रहे हैं सरणी के बीच और ArrayList:

  1. सरणी का कार्यान्वयन सरल निश्चित आकार सरणी लेकिन ArrayList का कार्यान्वयन गतिशील आकार सरणी है।
  2. ऐरे में प्राइमेटिव्स और ऑब्जेक्ट्स दोनों हो सकते हैं लेकिन ऐरेलिस्ट में केवल ऑब्जेक्ट तत्व
  3. आप जेनिक्स का उपयोग सरणी के साथ नहीं कर सकते हैं लेकिन ऐरेलिस्ट हमें टाइप सुरक्षा सुनिश्चित करने के लिए जेनेरिक का उपयोग करने की अनुमति देता है।
  4. आप लंबाई वैरिएबल का उपयोग कर सकते हैं ताकि सरणी की लंबाई की गणना करने के लिए आकार() विधि की गणना की जा सके।
  5. ऐरे तत्वों को स्टोर करने के लिए असाइनमेंट ऑपरेटर का उपयोग करें लेकिन तत्वों को सम्मिलित करने के लिए ArrayList जोड़ें() का उपयोग करें।
संबंधित मुद्दे