我正在尝试将十进制转换为二进制值,我已将Stack用作我的数据结构。当使用正常的堆栈弹出时,它以正确的顺序打印我4,二进制转换将为100.但我是java 8的新手,并尝试尽可能多地使用lambda来学习并在执行过程中,我意识到它的打印FIFO为4,它是打印001。 请找到以下代码,让我知道我在哪里做错了。
package com.interview.random;
import java.util.Stack;
public class ConvertDecimalToBinary {
public Stack<Integer> convertToBinary(int num){
Stack<Integer> st=new Stack<>();
while(num>1){
st.push(num%2);
num=num/2;
}
st.push(num);
return st;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack<Integer> st=new ConvertDecimalToBinary().convertToBinary(4);
//printing correctly
while(!st.isEmpty()){
System.out.println(st.pop());
}
//Printing in FIFO not correct
st.forEach(i->System.out.println(i));
}
}
答案 0 :(得分:2)
Stack
的迭代顺序是FIFO。这在Stack
javadocs中没有明确规定,但这就是实施的目的。
但是,Stack
javadocs 做这样说:
&#34;
Deque
接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应该优先使用这个类。&#34;
Deque
API提供两个迭代器,一个用于FIFO顺序,另一个用于LIFO顺序。 Deque::forEach
方法被指定为以FIFO顺序访问,但您可以这样做:
dq.reverseIterator()forEachRemaining(I-&GT;的System.out.println(I));