我正在尝试将十进制值转换为二进制值,我已使用堆栈作为数据结构。当使用普通的堆栈弹出时,它以正确的顺序打印我,例如 4 的二进制转换将为 100。但我是 java 8 的新手,并尝试尽可能多地使用 lambda 来学习,并在执行过程中,我意识到它打印 FIFO ex for 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));
}
Run Code Online (Sandbox Code Playgroud)
}
a 的迭代顺序Stack是 FIFO。Stackjavadocs中没有明确说明这一点,但这就是实现的作用。
然而,Stackjavadoc 确实是这么说的:
“该接口及其实现提供了一组更完整、更一致的 LIFO 堆栈操作
Deque,应优先使用该类。”
API提供了两种迭代Deque器,一种用于 FIFO 顺序,另一种用于 LIFO 顺序。该Deque::forEach方法被指定为按 FIFO 顺序访问,但您可以这样做:
dq.reverseIterator().forEachRemaining(i->System.out.println(i));
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |