2008-12-08 20 views
11

मैं अपेक्षाकृत नया जावा प्रोग्रामर सी ++/एसटीएल से आ रहा हूं, और इन विशेषताओं के साथ एक कक्षा की तलाश में हूं (जो सी ++ std :: डेक है, जैसा कि मैं इसे समझता हूं):जावा के बराबर std :: deque

  1. हे (1) शुरुआत/अंत में प्रविष्टि/हटाने के लिए प्रदर्शन
  2. हे (1) सूचकांक द्वारा देखने के लिए प्रदर्शन
  3. उगने वाली दाढ़ी संग्रह (निश्चित आकार सीमा की जरूरत नहीं है)
हैं

क्या जावा इसके बराबर है? मुझे Java 1.6 [ArrayDeque] क्लास मिली है जिसमें डालने/निकालने और बढ़ने योग्य विशेषताओं हैं, लेकिन ऐसा लगता है कि जब तक आप Araray() को कॉल नहीं करते हैं, तब तक लुकअप-बाय-इंडेक्स नहीं लगता है जो ओ (1) नहीं होगा।

उत्तर

10

जावा के लिए आदिम संग्रह में एक प्राप्त (int idx) विधि के साथ एक ArrayDeque है।

http://sourceforge.net/projects/pcj

मैं हालांकि इस परियोजना की गुणवत्ता के लिए ज़िम्मेदार नहीं हैं।

जेडीके ऐरेडेक स्रोत प्राप्त करने और प्राप्त करने के लिए एक विकल्प होगा (int idx) विधि स्वयं। अपेक्षाकृत आसान होना चाहिए।

संपादित करें: यदि आप अत्यधिक बहु-थ्रेडेड तरीके से डेक का उपयोग करना चाहते हैं, तो मैं "जेडीके के ऐरेडेक" पैच को पैच करूंगा। इस कार्यान्वयन का पूरी तरह से परीक्षण किया गया है और नए java.util.concurrent फोर्कजोइन ढांचे में प्रयोग किया जाता है।

+0

जीएनयू क्लासपाथ के लिए स्रोत ArrayDeque यहां है: http://fuseyism.com/classpath/doc/java/util/ArrayDeque-source.html। यह प्राप्त करने के लिए उचित रूप से आसान होना चाहिए (i), या यहां तक ​​कि इसे लागू करने के लिए सूची tgamblin

+1

पीसीजे केवल प्राचीन प्रकार के लिए काम करता है, जो इसकी उपयोगिता को सीमित करता है। –

+1

दिलचस्प ... जीएनयू सामान मुझे डराता है (हालांकि आपके द्वारा सूचीबद्ध ArrayDeque कोड के लिए लाइसेंस क्रिएटिव कॉमन्स दिखाता है ...अजीब) क्योंकि मैं एक वाणिज्यिक वातावरण में काम कर रहा हूं और किसी भी जीपीएल कोड का उपयोग नहीं कर सकता। –

0

मेरा डिफ़ॉल्ट दृष्टिकोण मेरी खुद की कक्षा को एक साथ जोड़ना होगा, जिसमें एरेलीलिस्ट को अंतर्निहित कार्यान्वयन के रूप में (उदाहरण के लिए ऐरेलिस्ट सूची में मेरी अपनी कक्षा का सूचकांक मैप करें) ... लेकिन मुझे पहिया को फिर से शुरू करने से नफरत है, खासकर जब स्क्रूइंग का अच्छा मौका होता है अप ...

+0

मैंने हैश मैप के बारे में अपनी पोस्ट हटा दी, लेकिन यह मुझे लगता है कि मनमाने ढंग से सम्मिलन के लिए ArrayList पर एक सुधार होगा। –

0

दिलचस्प ... मैं Java Generics and Collections पढ़ने के लिए बस खत्म कर रहा था और Java Specialists' Newsletter के लिंक सहित इस तरह के संग्रह की एक संक्षिप्त चर्चा है जिसमें एक परिपत्रअरेलेलिस्ट शामिल है जो मुझे चाहिए जो कर सकता है।

0

यहां उपयोग करने के लिए तैयार circular buffer implemented in Java, CircularArrayList है। हालांकि, सृजन के बाद यह बढ़ने योग्य नहीं है।

: (अस्वीकरण मेरी अपनी वेबसाइट लिए यह लिंक अंक) अन्य वेब के आसपास चल विकल्प one from the Java Specialists Newsletter होगा। मैं प्रयोग किया जाता है कि एक कभी नहीं, निम्नलिखित कारणों के लिए:

  1. यह अधूरा है - ("यह पद्धति पाठक के लिए एक व्यायाम के रूप में छोड़ दिया")
  2. यह सामान्य तत्व प्रकार का समर्थन नहीं करता के रूप में के साथ संगत हो गया होता जावा संग्रह के फ्रेमवर्क से अन्य संग्रह।
  3. यह सारणीसूची के जावाडोक द्वारा अनुशंसित विस्तार प्रक्रिया का पालन करने के बजाय अनावश्यक रूप से जटिल है, और इसलिए संभवतः छोटी है।
संबंधित मुद्दे