आज मैं java.util.Stack
कक्षा में धक्का देने की कोशिश कर रहा था और फिर आइटम्स के माध्यम से Iterator
को फिर से (पॉप का उपयोग किए बिना) का उपयोग करने का प्रयास कर रहा था। मैं एलआईएफओ संपत्ति की उम्मीद कर रहा था लेकिन आश्चर्यचकित हुआ।क्या java.util.Stack के इटरेटर में कोई बग है?
यहां वह कोड है जिसे मैं कोशिश कर रहा था।
import java.util.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
RobStack<Integer> rstack = new RobStack<Integer>(); // Correct Implementation
Stack<Integer> jstack = new Stack<Integer>(); // Default Java Implementation
rstack.push(0); jstack.push(0);
rstack.push(1); jstack.push(1);
rstack.push(2); jstack.push(2);
rstack.push(3); jstack.push(3);
System.out.print("Algo Stack: ");
for (int i : rstack)
System.out.print(i + " ");
System.out.print("\nJava Stack: ");
for (int i : jstack)
System.out.print(i + " ");
}
}
उत्पादन उपरोक्त कार्यक्रम नीचे दिया गया है
Algo Stack: 3 2 1 0
Java Stack: 0 1 2 3
ऊपर कोड jstack
में डिफ़ॉल्ट जावा कार्यान्वयन का उपयोग करता है और rstack
अपने एल्गोरिथ्म वर्ग के लिए implementation provided by Robert Sedgewick उपयोग करता है। मैंने पाया कि प्रो। रॉबर्ट का कार्यान्वयन ठीक काम करता है लेकिन java.util.Stack
कार्यान्वयन विफल रहता है।
क्या यह बग है या यह डिज़ाइन है?
नोट: 'Stack' अप्रचलित है, आप का उपयोग करना चाहिए एक' Deque' बजाय (उदाहरण के लिए एक 'ArrayDeque' – fge
और क्या करता है, तो आप दस्तावेज़ में पॉप() आपरेशन – jtomaszk
का उपयोग fge की टिप्पणी के समर्थन में,? [स्टैक] (http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html) वर्ग: 'लिफ़ो स्टैक ऑपरेशंस का एक और पूर्ण और सुसंगत सेट डेक इंटरफेस द्वारा प्रदान किया जाता है और इसके कार्यान्वयन, जिनका उपयोग इस वर्ग के वरीयता में किया जाना चाहिए। – nhahtdh