2012-03-06 21 views
48

मैं जावा में एक कक्षा के माध्यम से फीफो को कार्यान्वित करना चाहता हूं।जावा में फीफो कक्षा

क्या ऐसी कक्षा पहले से मौजूद है? यदि नहीं, तो मैं अपना खुद का कार्यान्वयन कैसे कर सकता हूं?

नोट

मैं यहाँ http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html एक वर्ग मिला, लेकिन यह dmg.util शामिल नहीं है। *। मुझे नहीं पता कि ऐसा पैकेज भी मौजूद है या नहीं।

उत्तर

101

आप Queue interface लागू करने वाले किसी भी वर्ग की तलाश में हैं, PriorityQueue और PriorityBlockingQueue को छोड़कर, जो फीफो एल्गोरिदम का उपयोग नहीं करते हैं।

LinkedListadd (अंत में एक जोड़ता है) और removeFirst (सामने से एक को हटा देता है और इसे वापस करता है) का उपयोग करने का सबसे आसान उपयोग करने वाला है। (

import java.util.LinkedList; 

class Test { 
    public static void main(String args[]) { 
     char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9}; 
     LinkedList<Integer> fifo = new LinkedList<Integer>(); 

     for (int i = 0; i < arr.length; i++) 
      fifo.add (new Integer (arr[i])); 

     System.out.print (fifo.removeFirst() + "."); 
     while (! fifo.isEmpty()) 
      System.out.print (fifo.removeFirst()); 
     System.out.println(); 
    } 
} 

वैकल्पिक रूप से, अगर आप आप केवल एक कतार के रूप में यह इलाज करना चाहते हैं पता :

उदाहरण के लिए, यहाँ एक कार्यक्रम कतार और पीआई के अंकों को पुनः प्राप्त करने एक LinkedList का उपयोग करता है है

import java.util.LinkedList; 
import java.util.Queue; 

class Test { 
    public static void main(String args[]) { 
     char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9}; 
     Queue<Integer> fifo = new LinkedList<Integer>(); 

     for (int i = 0; i < arr.length; i++) 
      fifo.add (new Integer (arr[i])); 

     System.out.print (fifo.remove() + "."); 
     while (! fifo.isEmpty()) 
      System.out.print (fifo.remove()); 
     System.out.println(); 
    } 
} 

यह एक का लाभ दिया है: एक लिंक्ड सूची के अतिरिक्त सुविधाओं) के बिना, आप बस Queue इंटरफ़ेस ही उपयोग कर सकते हैं आपको कोड को बदलने के बिना, Queue इंटरफ़ेस प्रदान करने वाले किसी भी वर्ग के साथ अंतर्निहित कंक्रीट कक्षा को प्रतिस्थापित करने की इच्छा है।

बुनियादी परिवर्तन एक Queue को fifo का प्रकार बदलने के लिए और remove() बजाय removeFirst(), बाद उपयोग करने के लिए Queue इंटरफेस के लिए उपलब्ध नहीं किया जा रहा है।

कॉलिंग isEmpty() अभी भी ठीक है क्योंकि Collection इंटरफेस से संबंधित है Queue एक व्युत्पन्न है।

+2

फिर फीफो को कतार क्यों नहीं बनाते? ठोस कार्यान्वयन के बजाय इंटरफ़ेस को लक्षित करें। –

+0

@ एडम, अच्छा बिंदु, मैंने इसे एक विकल्प के रूप में प्रदान किया है। – paxdiablo

+0

यदि आप वास्तव में आइटम को हटाए बिना किसी फीफो तरीके से कतार में आइटमों को फिर से चालू करना चाहते हैं, तो आप केवल 'ऑब्जेक्ट आइटम: कतार)' के लिए कर सकते हैं, और यह उन पर एक फीफो तरीके से फिर से चालू हो जाएगा कम से कम जेडीके 7 पर और 'ArrayDeQueue' और' LinkedList' impl के साथ। –

16

ArrayDeque या LinkedList आज़माएं, जो दोनों Queue इंटरफ़ेस को लागू करते हैं।

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html

+0

पर कुछ लूप है हां, ऐरेडेक और लिंक्डलिस्ट के पास डेक से .push विधि है, जो इसे फीफो के लिए एक स्टैक के रूप में उपयोग करने योग्य बनाता है। ArrayDeque एक बफर के रूप में उपयोग करने के लिए एक प्राचीन सरणी की तरह है जबकि LinkedList डेटा स्टोर की तरह अधिक है। – djangofan

+0

@djangofan ढेर lifo है –

2

Queue पहला आउट संरचनाओं में सबसे पहले है। आप अनुरोध बहुत अस्पष्ट है, लेकिन मुझे लगता है कि आपको केवल मूलभूत कार्यक्षमता की आवश्यकता है जो आमतौर पर कतार संरचनाओं के साथ आता है। आप इसे देख सकते हैं कि आप इसे here कैसे कार्यान्वित कर सकते हैं।

आपके लापता पैकेज के संबंध में, यह सबसे अधिक संभावना है क्योंकि आपको या तो ट्यूटोरियल का पालन करके पैकेज को डाउनलोड या बनाने की आवश्यकता होगी।

1

आप अपनी खुद की फीफो कतार लागू करने के लिए, बस इंटरफ़ेस java.util.Queue और इसके कार्यान्वयन को देखने

0
उपयोग कर सकते हैं की जरूरत नहीं है

आप LinkedBlockingQueue का उपयोग कर सकते हैं मैं इसे अपनी परियोजनाओं में उपयोग करता हूं। यह मानक जावा का हिस्सा है और काफी easy to use